diff --git a/crates/rascal/src/internal/as2/hir.rs b/crates/rascal/src/internal/as2/hir.rs index cca8be2..d8d1e67 100644 --- a/crates/rascal/src/internal/as2/hir.rs +++ b/crates/rascal/src/internal/as2/hir.rs @@ -1,9 +1,15 @@ +pub(crate) mod optimizer; +pub(crate) mod scope; +pub(crate) mod simplifier; +pub(crate) mod visitor; + use crate::internal::span::Spanned; use indexmap::IndexMap; use serde::Serialize; pub type Expr = Spanned; pub use crate::internal::as2::ast::{Affix, BinaryOperator, UnaryOperator}; +use crate::internal::as2::hir::scope::Scope; #[derive(Debug, Clone, Serialize, PartialEq)] pub enum ExprKind { @@ -38,7 +44,7 @@ pub enum ExprKind { TypeOf(Box), Delete(Box), Void(Box), - Function(Function), + Function(Box), GetVariable(Box), SetVariable(Box, Box), GotoFrame(Box, bool), @@ -87,206 +93,6 @@ pub enum ExprKind { ToggleQuality, } -impl ExprKind { - pub(crate) fn simplify(&mut self, anything_changed: &mut bool) { - match self { - ExprKind::Constant(_) => {} - ExprKind::Call { name, args } => { - name.value.simplify(anything_changed); - for arg in args { - arg.value.simplify(anything_changed); - } - } - ExprKind::New { name, args } => { - name.value.simplify(anything_changed); - for arg in args { - arg.value.simplify(anything_changed); - } - } - ExprKind::DuplicateMovieClip { - target, - depth, - source, - } => { - target.value.simplify(anything_changed); - depth.value.simplify(anything_changed); - source.value.simplify(anything_changed); - } - ExprKind::AsciiToChar(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::MBAsciiToChar(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::CallFrame(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::GetTime => {} - ExprKind::BinaryOperator(op, left, right) => { - left.value.simplify(anything_changed); - right.value.simplify(anything_changed); - if let ExprKind::Constant(left) = &left.value - && let ExprKind::Constant(right) = &right.value - { - #[expect(clippy::single_match)] - match (op, left, right) { - ( - BinaryOperator::StringAdd, - ConstantKind::String(left), - ConstantKind::String(right), - ) => { - *self = ExprKind::Constant(ConstantKind::String(format!( - "{}{}", - left, right - ))); - *anything_changed = true; - } - _ => {} - } - } - } - ExprKind::UnaryOperator(op, expr) => { - expr.value.simplify(anything_changed); - if let ExprKind::Constant(value) = &expr.value { - #[expect(clippy::single_match)] - match (op, value) { - (UnaryOperator::LogicalNot, ConstantKind::Boolean(value)) => { - *self = ExprKind::Constant(ConstantKind::Boolean(!value)); - *anything_changed = true; - } - _ => {} - } - } - } - ExprKind::Ternary { condition, yes, no } => { - condition.value.simplify(anything_changed); - yes.value.simplify(anything_changed); - no.value.simplify(anything_changed); - } - ExprKind::InitObject(values) => { - for (_key, value) in values { - value.value.simplify(anything_changed); - } - } - ExprKind::InitArray(values) => { - for value in values { - value.value.simplify(anything_changed); - } - } - ExprKind::Field(obj, key) => { - obj.value.simplify(anything_changed); - key.value.simplify(anything_changed); - } - ExprKind::TypeOf(value) => { - value.value.simplify(anything_changed); - } - ExprKind::Delete(value) => { - value.value.simplify(anything_changed); - } - ExprKind::Void(value) => { - value.value.simplify(anything_changed); - } - ExprKind::Function(function) => { - for statement in &mut function.body { - statement.simplify(anything_changed); - } - } - ExprKind::GetVariable(key) => { - key.value.simplify(anything_changed); - } - ExprKind::SetVariable(key, value) => { - key.value.simplify(anything_changed); - value.value.simplify(anything_changed); - } - ExprKind::GotoFrame(frame, _scene_change) => { - frame.value.simplify(anything_changed); - } - ExprKind::GetUrl { url, target, .. } => { - url.value.simplify(anything_changed); - target.value.simplify(anything_changed); - } - ExprKind::CastToInteger(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::CastToNumber(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::CastToString(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::StringLength(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::MBStringLength(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::CharToAscii(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::MBCharToAscii(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::Substring { - start, - length, - string, - } => { - string.value.simplify(anything_changed); - start.value.simplify(anything_changed); - length.value.simplify(anything_changed); - } - ExprKind::MBSubstring { - start, - length, - string, - } => { - string.value.simplify(anything_changed); - start.value.simplify(anything_changed); - length.value.simplify(anything_changed); - } - ExprKind::NextFrame => {} - ExprKind::PreviousFrame => {} - ExprKind::Play => {} - ExprKind::Stop => {} - ExprKind::StopSounds => {} - ExprKind::StartDrag { - target, - constraints, - .. - } => { - target.value.simplify(anything_changed); - if let Some((a, b, c, d)) = constraints { - a.value.simplify(anything_changed); - b.value.simplify(anything_changed); - c.value.simplify(anything_changed); - d.value.simplify(anything_changed); - } - } - ExprKind::EndDrag => {} - ExprKind::GetTargetPath(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::Trace(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::RemoveSprite(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::GetRandomNumber(expr) => { - expr.value.simplify(anything_changed); - } - ExprKind::GetProperty(obj, _property) => { - obj.value.simplify(anything_changed); - } - ExprKind::SetProperty(obj, _property, value) => { - obj.value.simplify(anything_changed); - value.value.simplify(anything_changed); - } - ExprKind::ToggleQuality => {} - } - } -} - #[derive(Debug, Copy, Clone, Serialize, PartialEq)] pub enum GetUrlMethod { None, @@ -301,12 +107,12 @@ pub enum ConstantKind { Float(f64), Integer(i32), Boolean(bool), - This, + Register(u8), } #[derive(Debug, Clone, Serialize, PartialEq)] pub enum StatementKind { - Declare(Vec), + Declare(Box), Return(Vec), Throw(Vec), Expr(Expr), @@ -347,109 +153,6 @@ pub enum StatementKind { }, } -impl StatementKind { - pub(crate) fn simplify(&mut self, anything_changed: &mut bool) { - match self { - StatementKind::Declare(declarations) => { - for declaration in declarations { - if let Some(value) = &mut declaration.value { - value.value.simplify(anything_changed); - } - } - } - StatementKind::Return(values) => { - for value in values { - value.value.simplify(anything_changed); - } - } - StatementKind::Throw(values) => { - for value in values { - value.value.simplify(anything_changed); - } - } - StatementKind::Expr(expr) => expr.value.simplify(anything_changed), - StatementKind::Block(statements) => { - for statement in statements { - statement.simplify(anything_changed); - } - } - StatementKind::ForIn { condition, body } => { - match condition { - ForCondition::Enumerate { object, .. } => { - object.value.simplify(anything_changed); - } - ForCondition::Classic { - initialize, - condition, - update, - } => { - if let Some(initialize) = initialize.as_mut() { - initialize.simplify(anything_changed); - } - for value in condition { - value.value.simplify(anything_changed); - } - for value in update { - value.value.simplify(anything_changed); - } - } - } - body.simplify(anything_changed); - } - StatementKind::While { condition, body } => { - condition.value.simplify(anything_changed); - body.simplify(anything_changed); - } - StatementKind::If { condition, yes, no } => { - condition.value.simplify(anything_changed); - yes.simplify(anything_changed); - if let Some(no) = no.as_mut() { - no.simplify(anything_changed); - } - } - StatementKind::Break => {} - StatementKind::Continue => {} - StatementKind::Try(try_catch) => { - try_catch.simplify(anything_changed); - } - StatementKind::WaitForFrame { - frame, - scene, - if_loaded, - } => { - frame.value.simplify(anything_changed); - if let Some(scene) = scene { - scene.value.simplify(anything_changed); - } - if_loaded.simplify(anything_changed); - } - StatementKind::TellTarget { target, body } => { - target.value.simplify(anything_changed); - body.simplify(anything_changed); - } - StatementKind::InlinePCode(_) => {} - StatementKind::With { target, body } => { - target.value.simplify(anything_changed); - body.simplify(anything_changed); - } - StatementKind::Switch { target, elements } => { - target.value.simplify(anything_changed); - for element in elements { - match element { - SwitchElement::Case(expr) => { - expr.value.simplify(anything_changed); - } - SwitchElement::Default => {} - SwitchElement::Statement(statement) => { - statement.simplify(anything_changed); - } - } - } - } - } - } -} - #[derive(Debug, Clone, Serialize, PartialEq)] pub enum SwitchElement { Case(Expr), @@ -479,13 +182,24 @@ pub struct Method { pub is_static: bool, } -#[derive(Debug, Clone, Serialize, PartialEq)] +#[derive(Debug, Clone, Serialize, PartialEq, Default)] pub struct Function { pub signature: FunctionSignature, pub body: Vec, + pub scope: Scope, + pub register_count: u8, + pub preload_this: bool, + pub suppress_this: bool, + pub preload_arguments: bool, + pub suppress_arguments: bool, + pub preload_super: bool, + pub suppress_super: bool, + pub preload_root: bool, + pub preload_parent: bool, + pub preload_global: bool, } -#[derive(Debug, Clone, Serialize, PartialEq)] +#[derive(Debug, Clone, Serialize, PartialEq, Default)] pub struct FunctionSignature { pub name: Option>, pub args: Vec, @@ -496,6 +210,7 @@ pub struct FunctionSignature { pub struct FunctionArgument { pub name: String, pub type_name: Option>, + pub register: Option, } #[derive(Debug, Clone, Serialize, PartialEq)] @@ -520,37 +235,12 @@ pub struct TryCatch { pub finally: Vec, } -impl TryCatch { - pub(crate) fn simplify(&mut self, anything_changed: &mut bool) { - for statement in &mut self.try_body { - statement.simplify(anything_changed); - } - for (_, catch) in &mut self.typed_catches { - catch.simplify(anything_changed); - } - if let Some(catch_all) = &mut self.catch_all { - catch_all.simplify(anything_changed); - } - for statement in &mut self.finally { - statement.simplify(anything_changed); - } - } -} - #[derive(Debug, Clone, Serialize, PartialEq)] pub struct Catch { pub name: Spanned, pub body: Vec, } -impl Catch { - pub(crate) fn simplify(&mut self, anything_changed: &mut bool) { - for statement in &mut self.body { - statement.simplify(anything_changed); - } - } -} - #[derive(Debug, Clone, Serialize, PartialEq)] pub struct Interface { pub name: String, @@ -579,27 +269,11 @@ pub struct VirtualProperty { #[derive(Debug, Serialize)] pub enum Document { - Script(Vec), + Script { + statements: Vec, + scope: Scope, + }, Interface(Interface), Class(Box), Invalid, } - -impl Document { - pub fn simplify(&mut self) -> bool { - let mut anything_changed = false; - - match self { - Document::Script(statements) => { - for statement in statements { - statement.simplify(&mut anything_changed); - } - } - Document::Interface(_interface) => {} - Document::Class(_class) => {} - Document::Invalid => {} - } - - anything_changed - } -} diff --git a/crates/rascal/src/internal/as2/hir/optimizer.rs b/crates/rascal/src/internal/as2/hir/optimizer.rs new file mode 100644 index 0000000..5f6521c --- /dev/null +++ b/crates/rascal/src/internal/as2/hir/optimizer.rs @@ -0,0 +1,118 @@ +use crate::internal::as2::ast::BinaryOperator; +use crate::internal::as2::hir::visitor::{MutVisitor, walk_expr, walk_statement}; +use crate::internal::as2::hir::{ConstantKind, Document, Expr, ExprKind, Function, StatementKind}; +use crate::internal::span::Span; +use indexmap::IndexMap; + +#[derive(Default)] +struct Optimizer { + registers: IndexMap, +} + +impl MutVisitor for Optimizer { + fn visit_expr(&mut self, expr: &mut Expr) { + walk_expr(self, expr); + + if let ExprKind::Constant(ConstantKind::Identifier(identifier)) = &expr.value + && let Some(register) = self.registers.get(identifier) + { + expr.value = ExprKind::Constant(ConstantKind::Register(*register)); + } + } + + fn visit_statement(&mut self, statement: &mut StatementKind) { + if let Some((register, value)) = match statement { + StatementKind::Declare(declaration) => self + .registers + .get(&declaration.name.value) + .map(|&r| (r, declaration.value.clone())), + _ => None, + } { + if let Some(value) = value { + *statement = StatementKind::Expr(Expr::new( + Span::default(), + ExprKind::BinaryOperator( + BinaryOperator::Assign, + Box::new(Expr::new( + Span::default(), + ExprKind::Constant(ConstantKind::Register(register)), + )), + Box::new(value), + ), + )); + } else { + *statement = StatementKind::Block(vec![]); + } + } + walk_statement(self, statement); + } + + fn visit_function(&mut self, function: &mut Function) { + let prev_registers = std::mem::take(&mut self.registers); + if !function.scope.could_reference_anything { + // Start suppressing everything and then unsuppress what we need + function.suppress_this = true; + function.suppress_arguments = true; + function.suppress_super = true; + + let mut register = 1; // 0 is reserved! + for (name, variable) in &function.scope.defined_variables { + if variable.used && !variable.used_in_inner_scope { + self.registers.insert(name.clone(), register); + if let Some(arg) = function + .signature + .args + .iter_mut() + .find(|arg| arg.name == *name) + { + arg.register = Some(register); + } + register += 1; + if name == "this" { + function.preload_this = true; + function.suppress_this = false; + } + if name == "arguments" { + function.preload_arguments = true; + function.suppress_arguments = false; + } + if name == "super" { + function.preload_super = true; + function.suppress_super = false; + } + if name == "_root" { + function.preload_root = true; + } + if name == "_parent" { + function.preload_parent = true; + } + if name == "_global" { + function.preload_global = true; + } + } + } + function.register_count = register; + } + + for statement in &mut function.body { + self.visit_statement(statement); + } + + self.registers = prev_registers; + } +} + +pub fn optimize_variables_to_registers(document: &mut Document) { + let mut simplifier = Optimizer::default(); + + match document { + Document::Script { statements, .. } => { + for statement in statements { + simplifier.visit_statement(statement); + } + } + Document::Interface(_interface) => {} + Document::Class(_class) => {} + Document::Invalid => {} + } +} diff --git a/crates/rascal/src/internal/as2/hir/scope.rs b/crates/rascal/src/internal/as2/hir/scope.rs new file mode 100644 index 0000000..0ecd4de --- /dev/null +++ b/crates/rascal/src/internal/as2/hir/scope.rs @@ -0,0 +1,115 @@ +use crate::internal::as2::hir::visitor::{MutVisitor, walk_expr, walk_statement}; +use crate::internal::as2::hir::{ + ConstantKind, Declaration, Expr, ExprKind, Function, FunctionArgument, StatementKind, +}; +use indexmap::{IndexMap, IndexSet}; +use serde::Serialize; + +#[derive(Debug, Clone, Serialize, PartialEq, Default)] +pub struct Variable { + pub used: bool, + pub used_in_inner_scope: bool, +} +#[derive(Debug, Clone, Serialize, PartialEq, Default)] +pub struct Scope { + pub defined_variables: IndexMap, + pub referenced_variables: IndexSet, + pub could_reference_anything: bool, +} + +impl Scope { + pub fn for_function(args: &Vec, body: &mut Vec) -> Self { + let mut scope = Scope::default(); + // These must be defined before any arguments, in this order: this arguments super _root _parent _global + scope + .defined_variables + .insert("this".to_string(), Variable::default()); + scope + .defined_variables + .insert("arguments".to_string(), Variable::default()); + scope + .defined_variables + .insert("super".to_string(), Variable::default()); + scope + .defined_variables + .insert("_root".to_string(), Variable::default()); + scope + .defined_variables + .insert("_parent".to_string(), Variable::default()); + scope + .defined_variables + .insert("_global".to_string(), Variable::default()); + for arg in args { + scope + .defined_variables + .insert(arg.name.clone(), Variable::default()); + } + let mut finder = VariableFinder(scope); + for statement in body { + finder.visit_statement(statement); + } + finder.0 + } + + pub fn for_root(body: &mut Vec) -> Self { + let mut finder = VariableFinder(Scope::default()); + for statement in body { + finder.visit_statement(statement); + } + finder.0 + } +} + +struct VariableFinder(Scope); + +impl MutVisitor for VariableFinder { + fn visit_expr(&mut self, expr: &mut Expr) { + match &mut expr.value { + ExprKind::Constant(ConstantKind::Identifier(name)) => { + if let Some(variable) = self.0.defined_variables.get_mut(name) { + variable.used = true; + } else { + self.0.referenced_variables.insert(name.clone()); + } + } + ExprKind::GetVariable(_) => { + self.0.could_reference_anything = true; + } + _ => {} + } + walk_expr(self, expr) + } + + fn visit_function(&mut self, function: &mut Function) { + // A totally different scope! We don't need to walk it, we can just inspect it. + self.0.could_reference_anything |= function.scope.could_reference_anything; + for name in &function.scope.referenced_variables { + if let Some(variable) = self.0.defined_variables.get_mut(name) { + variable.used = true; + variable.used_in_inner_scope = true; + } else { + self.0.referenced_variables.insert(name.clone()); + } + } + } + + fn visit_declaration(&mut self, declaration: &mut Declaration) { + self.0.defined_variables.insert( + declaration.name.value.clone(), + Variable { + used: true, + ..Default::default() + }, + ); + if let Some(value) = &mut declaration.value { + self.visit_expr(value); + } + } + + fn visit_statement(&mut self, statement: &mut StatementKind) { + if let StatementKind::With { .. } = statement { + self.0.could_reference_anything = true; + } + walk_statement(self, statement); + } +} diff --git a/crates/rascal/src/internal/as2/hir/simplifier.rs b/crates/rascal/src/internal/as2/hir/simplifier.rs new file mode 100644 index 0000000..9421417 --- /dev/null +++ b/crates/rascal/src/internal/as2/hir/simplifier.rs @@ -0,0 +1,68 @@ +use crate::internal::as2::ast::{BinaryOperator, UnaryOperator}; +use crate::internal::as2::hir::visitor::{MutVisitor, walk_expr}; +use crate::internal::as2::hir::{ConstantKind, Document, Expr, ExprKind}; + +struct Simplifier { + anything_changed: bool, +} + +impl MutVisitor for Simplifier { + fn visit_expr(&mut self, expr: &mut Expr) { + walk_expr(self, expr); + match &mut expr.value { + ExprKind::BinaryOperator(op, left, right) => { + if let ExprKind::Constant(left) = &left.value + && let ExprKind::Constant(right) = &right.value + { + #[expect(clippy::single_match)] + match (op, left, right) { + ( + BinaryOperator::StringAdd, + ConstantKind::String(left), + ConstantKind::String(right), + ) => { + expr.value = ExprKind::Constant(ConstantKind::String(format!( + "{}{}", + left, right + ))); + self.anything_changed = true; + } + _ => {} + } + } + } + ExprKind::UnaryOperator(op, inner) => { + if let ExprKind::Constant(value) = &inner.value { + #[expect(clippy::single_match)] + match (op, value) { + (UnaryOperator::LogicalNot, ConstantKind::Boolean(value)) => { + expr.value = ExprKind::Constant(ConstantKind::Boolean(!value)); + self.anything_changed = true; + } + _ => {} + } + } + } + _ => {} + } + } +} + +pub fn simplify(document: &mut Document) -> bool { + let mut simplifier = Simplifier { + anything_changed: false, + }; + + match document { + Document::Script { statements, .. } => { + for statement in statements { + simplifier.visit_statement(statement); + } + } + Document::Interface(_interface) => {} + Document::Class(_class) => {} + Document::Invalid => {} + } + + simplifier.anything_changed +} diff --git a/crates/rascal/src/internal/as2/hir/visitor.rs b/crates/rascal/src/internal/as2/hir/visitor.rs new file mode 100644 index 0000000..2c64ae1 --- /dev/null +++ b/crates/rascal/src/internal/as2/hir/visitor.rs @@ -0,0 +1,258 @@ +use crate::internal::as2::hir::{ + Declaration, Expr, ExprKind, ForCondition, Function, StatementKind, SwitchElement, +}; + +pub trait MutVisitor { + fn visit_expr(&mut self, expr: &mut Expr) { + walk_expr(self, expr); + } + + fn visit_function(&mut self, function: &mut Function) { + for statement in &mut function.body { + walk_statement(self, statement); + } + } + + fn visit_statement(&mut self, statement: &mut StatementKind) { + walk_statement(self, statement); + } + + fn visit_declaration(&mut self, declaration: &mut Declaration) { + if let Some(value) = &mut declaration.value { + self.visit_expr(value); + } + } +} + +pub fn walk_statement(visitor: &mut V, statement: &mut StatementKind) { + match statement { + StatementKind::Declare(declaration) => { + visitor.visit_declaration(declaration); + } + StatementKind::Return(exprs) => { + for expr in exprs { + visitor.visit_expr(expr); + } + } + StatementKind::Throw(exprs) => { + for expr in exprs { + visitor.visit_expr(expr); + } + } + StatementKind::Expr(expr) => { + visitor.visit_expr(expr); + } + StatementKind::Block(statements) => { + for statement in statements { + visitor.visit_statement(statement); + } + } + StatementKind::ForIn { condition, body } => { + match condition { + ForCondition::Enumerate { object, .. } => visitor.visit_expr(object), + ForCondition::Classic { + initialize, + condition, + update, + } => { + if let Some(initialize) = initialize { + visitor.visit_statement(initialize); + } + for expr in condition { + visitor.visit_expr(expr); + } + for expr in update { + visitor.visit_expr(expr); + } + } + } + visitor.visit_statement(body); + } + StatementKind::While { condition, body } => { + visitor.visit_expr(condition); + visitor.visit_statement(body); + } + StatementKind::If { condition, yes, no } => { + visitor.visit_expr(condition); + visitor.visit_statement(yes); + if let Some(no) = no { + visitor.visit_statement(no); + } + } + StatementKind::Break => {} + StatementKind::Continue => {} + StatementKind::Try(try_catch) => { + for catch in &mut try_catch.try_body { + visitor.visit_statement(catch); + } + for (_, catch) in &mut try_catch.typed_catches { + for catch in &mut catch.body { + visitor.visit_statement(catch); + } + } + if let Some(catch) = &mut try_catch.catch_all { + for catch in &mut catch.body { + visitor.visit_statement(catch); + } + } + for statement in &mut try_catch.finally { + visitor.visit_statement(statement); + } + } + StatementKind::WaitForFrame { + frame, + scene, + if_loaded, + } => { + visitor.visit_expr(frame); + if let Some(scene) = scene { + visitor.visit_expr(scene); + } + visitor.visit_statement(if_loaded); + } + StatementKind::TellTarget { target, body } => { + visitor.visit_expr(target); + visitor.visit_statement(body); + } + StatementKind::InlinePCode(_) => {} + StatementKind::With { target, body } => { + visitor.visit_expr(target); + visitor.visit_statement(body); + } + StatementKind::Switch { target, elements } => { + visitor.visit_expr(target); + for element in elements { + match element { + SwitchElement::Case(case) => visitor.visit_expr(case), + SwitchElement::Default => {} + SwitchElement::Statement(stmt) => visitor.visit_statement(stmt), + } + } + } + } +} + +pub fn walk_expr(visitor: &mut V, expr: &mut Expr) { + match &mut expr.value { + ExprKind::Constant(_constant) => (), + ExprKind::Call { name, args } => { + visitor.visit_expr(name); + for arg in args { + visitor.visit_expr(arg); + } + } + ExprKind::New { name, args } => { + visitor.visit_expr(name); + for arg in args { + visitor.visit_expr(arg); + } + } + ExprKind::DuplicateMovieClip { + source, + target, + depth, + } => { + visitor.visit_expr(source); + visitor.visit_expr(target); + visitor.visit_expr(depth); + } + ExprKind::AsciiToChar(expr) => visitor.visit_expr(expr), + ExprKind::MBAsciiToChar(expr) => visitor.visit_expr(expr), + ExprKind::CallFrame(expr) => visitor.visit_expr(expr), + ExprKind::GetTime => {} + ExprKind::BinaryOperator(_, left, right) => { + visitor.visit_expr(left); + visitor.visit_expr(right); + } + ExprKind::UnaryOperator(_, expr) => visitor.visit_expr(expr), + ExprKind::Ternary { condition, yes, no } => { + visitor.visit_expr(condition); + visitor.visit_expr(yes); + visitor.visit_expr(no); + } + ExprKind::InitObject(values) => { + for (_key, value) in values { + visitor.visit_expr(value); + } + } + ExprKind::InitArray(values) => { + for value in values { + visitor.visit_expr(value); + } + } + ExprKind::Field(parent, child) => { + visitor.visit_expr(parent); + visitor.visit_expr(child); + } + ExprKind::TypeOf(expr) => visitor.visit_expr(expr), + ExprKind::Delete(expr) => visitor.visit_expr(expr), + ExprKind::Void(expr) => visitor.visit_expr(expr), + ExprKind::Function(function) => { + visitor.visit_function(function); + } + ExprKind::GetVariable(name) => visitor.visit_expr(name), + ExprKind::SetVariable(name, value) => { + visitor.visit_expr(name); + visitor.visit_expr(value); + } + ExprKind::GotoFrame(frame, _) => visitor.visit_expr(frame), + ExprKind::GetUrl { target, url, .. } => { + visitor.visit_expr(target); + visitor.visit_expr(url); + } + ExprKind::CastToInteger(value) => visitor.visit_expr(value), + ExprKind::CastToNumber(value) => visitor.visit_expr(value), + ExprKind::CastToString(value) => visitor.visit_expr(value), + ExprKind::StringLength(value) => visitor.visit_expr(value), + ExprKind::MBStringLength(value) => visitor.visit_expr(value), + ExprKind::CharToAscii(value) => visitor.visit_expr(value), + ExprKind::MBCharToAscii(value) => visitor.visit_expr(value), + ExprKind::Substring { + string, + start, + length, + } => { + visitor.visit_expr(string); + visitor.visit_expr(start); + visitor.visit_expr(length); + } + ExprKind::MBSubstring { + string, + start, + length, + } => { + visitor.visit_expr(string); + visitor.visit_expr(start); + visitor.visit_expr(length); + } + ExprKind::NextFrame => {} + ExprKind::PreviousFrame => {} + ExprKind::Play => {} + ExprKind::Stop => {} + ExprKind::StopSounds => {} + ExprKind::StartDrag { + target, + constraints, + .. + } => { + visitor.visit_expr(target); + if let Some((a, b, c, d)) = constraints { + visitor.visit_expr(a); + visitor.visit_expr(b); + visitor.visit_expr(c); + visitor.visit_expr(d); + } + } + ExprKind::EndDrag => {} + ExprKind::GetTargetPath(expr) => visitor.visit_expr(expr), + ExprKind::Trace(expr) => visitor.visit_expr(expr), + ExprKind::RemoveSprite(expr) => visitor.visit_expr(expr), + ExprKind::GetRandomNumber(expr) => visitor.visit_expr(expr), + ExprKind::GetProperty(obj, _) => visitor.visit_expr(obj), + ExprKind::SetProperty(obj, _, value) => { + visitor.visit_expr(obj); + visitor.visit_expr(value); + } + ExprKind::ToggleQuality => {} + } +} diff --git a/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@registers.as.snap b/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@registers.as.snap new file mode 100644 index 0000000..aecf4bc --- /dev/null +++ b/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@registers.as.snap @@ -0,0 +1,744 @@ +--- +source: crates/rascal/src/internal/as2/lexer/tests.rs +expression: tokens +input_file: samples/as2/registers.as +--- +- kind: + Keyword: Function + span: + start: 0 + end: 8 + raw: function +- kind: OpenParen + span: + start: 8 + end: 9 + raw: ( +- kind: Identifier + span: + start: 9 + end: 10 + raw: a +- kind: Comma + span: + start: 10 + end: 11 + raw: "," +- kind: Identifier + span: + start: 12 + end: 13 + raw: b +- kind: CloseParen + span: + start: 13 + end: 14 + raw: ) +- kind: OpenBrace + span: + start: 15 + end: 16 + raw: "{" +- kind: Newline + span: + start: 16 + end: 17 + raw: "\n" +- kind: Identifier + span: + start: 21 + end: 26 + raw: trace +- kind: OpenParen + span: + start: 26 + end: 27 + raw: ( +- kind: Identifier + span: + start: 27 + end: 31 + raw: this +- kind: CloseParen + span: + start: 31 + end: 32 + raw: ) +- kind: Semicolon + span: + start: 32 + end: 33 + raw: ; +- kind: Newline + span: + start: 33 + end: 34 + raw: "\n" +- kind: Identifier + span: + start: 38 + end: 43 + raw: trace +- kind: OpenParen + span: + start: 43 + end: 44 + raw: ( +- kind: Identifier + span: + start: 44 + end: 53 + raw: arguments +- kind: CloseParen + span: + start: 53 + end: 54 + raw: ) +- kind: Semicolon + span: + start: 54 + end: 55 + raw: ; +- kind: Newline + span: + start: 55 + end: 56 + raw: "\n" +- kind: Identifier + span: + start: 60 + end: 65 + raw: trace +- kind: OpenParen + span: + start: 65 + end: 66 + raw: ( +- kind: Identifier + span: + start: 66 + end: 71 + raw: super +- kind: CloseParen + span: + start: 71 + end: 72 + raw: ) +- kind: Semicolon + span: + start: 72 + end: 73 + raw: ; +- kind: Newline + span: + start: 73 + end: 74 + raw: "\n" +- kind: Identifier + span: + start: 78 + end: 83 + raw: trace +- kind: OpenParen + span: + start: 83 + end: 84 + raw: ( +- kind: Identifier + span: + start: 84 + end: 89 + raw: _root +- kind: CloseParen + span: + start: 89 + end: 90 + raw: ) +- kind: Semicolon + span: + start: 90 + end: 91 + raw: ; +- kind: Newline + span: + start: 91 + end: 92 + raw: "\n" +- kind: Identifier + span: + start: 96 + end: 101 + raw: trace +- kind: OpenParen + span: + start: 101 + end: 102 + raw: ( +- kind: Identifier + span: + start: 102 + end: 109 + raw: _parent +- kind: CloseParen + span: + start: 109 + end: 110 + raw: ) +- kind: Semicolon + span: + start: 110 + end: 111 + raw: ; +- kind: Newline + span: + start: 111 + end: 112 + raw: "\n" +- kind: Identifier + span: + start: 116 + end: 121 + raw: trace +- kind: OpenParen + span: + start: 121 + end: 122 + raw: ( +- kind: Identifier + span: + start: 122 + end: 129 + raw: _global +- kind: CloseParen + span: + start: 129 + end: 130 + raw: ) +- kind: Semicolon + span: + start: 130 + end: 131 + raw: ; +- kind: Newline + span: + start: 131 + end: 132 + raw: "\n" +- kind: Identifier + span: + start: 136 + end: 141 + raw: trace +- kind: OpenParen + span: + start: 141 + end: 142 + raw: ( +- kind: Identifier + span: + start: 142 + end: 143 + raw: a +- kind: CloseParen + span: + start: 143 + end: 144 + raw: ) +- kind: Semicolon + span: + start: 144 + end: 145 + raw: ; +- kind: Newline + span: + start: 145 + end: 146 + raw: "\n" +- kind: CloseBrace + span: + start: 146 + end: 147 + raw: "}" +- kind: Newline + span: + start: 147 + end: 148 + raw: "\n" +- kind: + Keyword: Function + span: + start: 148 + end: 156 + raw: function +- kind: OpenParen + span: + start: 156 + end: 157 + raw: ( +- kind: Identifier + span: + start: 157 + end: 158 + raw: a +- kind: Comma + span: + start: 158 + end: 159 + raw: "," +- kind: Identifier + span: + start: 160 + end: 161 + raw: b +- kind: CloseParen + span: + start: 161 + end: 162 + raw: ) +- kind: OpenBrace + span: + start: 163 + end: 164 + raw: "{" +- kind: Newline + span: + start: 164 + end: 165 + raw: "\n" +- kind: Identifier + span: + start: 169 + end: 174 + raw: trace +- kind: OpenParen + span: + start: 174 + end: 175 + raw: ( +- kind: Identifier + span: + start: 175 + end: 179 + raw: this +- kind: CloseParen + span: + start: 179 + end: 180 + raw: ) +- kind: Semicolon + span: + start: 180 + end: 181 + raw: ; +- kind: Newline + span: + start: 181 + end: 182 + raw: "\n" +- kind: Identifier + span: + start: 186 + end: 191 + raw: trace +- kind: OpenParen + span: + start: 191 + end: 192 + raw: ( +- kind: Identifier + span: + start: 192 + end: 201 + raw: arguments +- kind: CloseParen + span: + start: 201 + end: 202 + raw: ) +- kind: Semicolon + span: + start: 202 + end: 203 + raw: ; +- kind: Newline + span: + start: 203 + end: 204 + raw: "\n" +- kind: Identifier + span: + start: 208 + end: 213 + raw: trace +- kind: OpenParen + span: + start: 213 + end: 214 + raw: ( +- kind: Identifier + span: + start: 214 + end: 219 + raw: super +- kind: CloseParen + span: + start: 219 + end: 220 + raw: ) +- kind: Semicolon + span: + start: 220 + end: 221 + raw: ; +- kind: Newline + span: + start: 221 + end: 222 + raw: "\n" +- kind: Identifier + span: + start: 226 + end: 231 + raw: trace +- kind: OpenParen + span: + start: 231 + end: 232 + raw: ( +- kind: Identifier + span: + start: 232 + end: 237 + raw: _root +- kind: CloseParen + span: + start: 237 + end: 238 + raw: ) +- kind: Semicolon + span: + start: 238 + end: 239 + raw: ; +- kind: Newline + span: + start: 239 + end: 240 + raw: "\n" +- kind: Identifier + span: + start: 244 + end: 249 + raw: trace +- kind: OpenParen + span: + start: 249 + end: 250 + raw: ( +- kind: Identifier + span: + start: 250 + end: 257 + raw: _parent +- kind: CloseParen + span: + start: 257 + end: 258 + raw: ) +- kind: Semicolon + span: + start: 258 + end: 259 + raw: ; +- kind: Newline + span: + start: 259 + end: 260 + raw: "\n" +- kind: Identifier + span: + start: 264 + end: 269 + raw: trace +- kind: OpenParen + span: + start: 269 + end: 270 + raw: ( +- kind: Identifier + span: + start: 270 + end: 277 + raw: _global +- kind: CloseParen + span: + start: 277 + end: 278 + raw: ) +- kind: Semicolon + span: + start: 278 + end: 279 + raw: ; +- kind: Newline + span: + start: 279 + end: 280 + raw: "\n" +- kind: Identifier + span: + start: 284 + end: 289 + raw: trace +- kind: OpenParen + span: + start: 289 + end: 290 + raw: ( +- kind: Identifier + span: + start: 290 + end: 291 + raw: a +- kind: CloseParen + span: + start: 291 + end: 292 + raw: ) +- kind: Semicolon + span: + start: 292 + end: 293 + raw: ; +- kind: Newline + span: + start: 293 + end: 294 + raw: "\n" +- kind: Identifier + span: + start: 298 + end: 302 + raw: eval +- kind: OpenParen + span: + start: 302 + end: 303 + raw: ( +- kind: + String: Double + span: + start: 303 + end: 305 + raw: "" +- kind: CloseParen + span: + start: 305 + end: 306 + raw: ) +- kind: Semicolon + span: + start: 306 + end: 307 + raw: ; +- kind: CloseBrace + span: + start: 333 + end: 334 + raw: "}" +- kind: Newline + span: + start: 334 + end: 335 + raw: "\n" +- kind: Newline + span: + start: 335 + end: 336 + raw: "\n" +- kind: + Keyword: Function + span: + start: 336 + end: 344 + raw: function +- kind: OpenParen + span: + start: 344 + end: 345 + raw: ( +- kind: Identifier + span: + start: 345 + end: 346 + raw: a +- kind: Comma + span: + start: 346 + end: 347 + raw: "," +- kind: Identifier + span: + start: 348 + end: 349 + raw: b +- kind: CloseParen + span: + start: 349 + end: 350 + raw: ) +- kind: OpenBrace + span: + start: 351 + end: 352 + raw: "{" +- kind: Newline + span: + start: 352 + end: 353 + raw: "\n" +- kind: + Keyword: Var + span: + start: 357 + end: 360 + raw: var +- kind: Identifier + span: + start: 361 + end: 362 + raw: c +- kind: Semicolon + span: + start: 362 + end: 363 + raw: ; +- kind: Newline + span: + start: 363 + end: 364 + raw: "\n" +- kind: CloseBrace + span: + start: 364 + end: 365 + raw: "}" +- kind: Newline + span: + start: 365 + end: 366 + raw: "\n" +- kind: Newline + span: + start: 366 + end: 367 + raw: "\n" +- kind: + Keyword: Function + span: + start: 367 + end: 375 + raw: function +- kind: OpenParen + span: + start: 375 + end: 376 + raw: ( +- kind: Identifier + span: + start: 376 + end: 377 + raw: a +- kind: Comma + span: + start: 377 + end: 378 + raw: "," +- kind: Identifier + span: + start: 379 + end: 380 + raw: b +- kind: CloseParen + span: + start: 380 + end: 381 + raw: ) +- kind: OpenBrace + span: + start: 382 + end: 383 + raw: "{" +- kind: Newline + span: + start: 383 + end: 384 + raw: "\n" +- kind: + Keyword: Var + span: + start: 388 + end: 391 + raw: var +- kind: Identifier + span: + start: 392 + end: 393 + raw: c +- kind: + Operator: Assign + span: + start: 394 + end: 395 + raw: "=" +- kind: Integer + span: + start: 396 + end: 397 + raw: "2" +- kind: Semicolon + span: + start: 397 + end: 398 + raw: ; +- kind: Newline + span: + start: 398 + end: 399 + raw: "\n" +- kind: Identifier + span: + start: 403 + end: 407 + raw: eval +- kind: OpenParen + span: + start: 407 + end: 408 + raw: ( +- kind: + String: Double + span: + start: 408 + end: 410 + raw: "" +- kind: CloseParen + span: + start: 410 + end: 411 + raw: ) +- kind: Semicolon + span: + start: 411 + end: 412 + raw: ; +- kind: CloseBrace + span: + start: 438 + end: 439 + raw: "}" +- kind: Newline + span: + start: 439 + end: 440 + raw: "\n" diff --git a/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@scoping.as.snap b/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@scoping.as.snap new file mode 100644 index 0000000..c6947b4 --- /dev/null +++ b/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@scoping.as.snap @@ -0,0 +1,3092 @@ +--- +source: crates/rascal/src/internal/as2/lexer/tests.rs +expression: tokens +input_file: samples/as2/scoping.as +--- +- kind: + Keyword: Function + span: + start: 0 + end: 8 + raw: function +- kind: OpenParen + span: + start: 8 + end: 9 + raw: ( +- kind: CloseParen + span: + start: 9 + end: 10 + raw: ) +- kind: OpenBrace + span: + start: 11 + end: 12 + raw: "{" +- kind: Newline + span: + start: 12 + end: 13 + raw: "\n" +- kind: + Keyword: Var + span: + start: 14 + end: 17 + raw: var +- kind: Identifier + span: + start: 18 + end: 19 + raw: a +- kind: + Operator: Assign + span: + start: 20 + end: 21 + raw: "=" +- kind: + String: Double + span: + start: 22 + end: 31 + raw: outer_a +- kind: Semicolon + span: + start: 31 + end: 32 + raw: ; +- kind: Newline + span: + start: 32 + end: 33 + raw: "\n" +- kind: + Keyword: Var + span: + start: 34 + end: 37 + raw: var +- kind: Identifier + span: + start: 38 + end: 39 + raw: b +- kind: + Operator: Assign + span: + start: 40 + end: 41 + raw: "=" +- kind: + String: Double + span: + start: 42 + end: 51 + raw: outer_b +- kind: Semicolon + span: + start: 51 + end: 52 + raw: ; +- kind: Newline + span: + start: 52 + end: 53 + raw: "\n" +- kind: + Keyword: Var + span: + start: 54 + end: 57 + raw: var +- kind: Identifier + span: + start: 58 + end: 59 + raw: c +- kind: + Operator: Assign + span: + start: 60 + end: 61 + raw: "=" +- kind: + String: Double + span: + start: 62 + end: 71 + raw: outer_c +- kind: Semicolon + span: + start: 71 + end: 72 + raw: ; +- kind: Newline + span: + start: 72 + end: 73 + raw: "\n" +- kind: OpenBrace + span: + start: 74 + end: 75 + raw: "{" +- kind: Newline + span: + start: 75 + end: 76 + raw: "\n" +- kind: Identifier + span: + start: 78 + end: 79 + raw: a +- kind: + Operator: Assign + span: + start: 80 + end: 81 + raw: "=" +- kind: + String: Double + span: + start: 82 + end: 91 + raw: inner_a +- kind: Semicolon + span: + start: 91 + end: 92 + raw: ; +- kind: Newline + span: + start: 92 + end: 93 + raw: "\n" +- kind: + Keyword: Var + span: + start: 95 + end: 98 + raw: var +- kind: Identifier + span: + start: 99 + end: 100 + raw: b +- kind: + Operator: Assign + span: + start: 101 + end: 102 + raw: "=" +- kind: + String: Double + span: + start: 103 + end: 112 + raw: inner_b +- kind: Semicolon + span: + start: 112 + end: 113 + raw: ; +- kind: Newline + span: + start: 113 + end: 114 + raw: "\n" +- kind: CloseBrace + span: + start: 115 + end: 116 + raw: "}" +- kind: Newline + span: + start: 116 + end: 117 + raw: "\n" +- kind: CloseBrace + span: + start: 117 + end: 118 + raw: "}" +- kind: Newline + span: + start: 118 + end: 119 + raw: "\n" +- kind: Newline + span: + start: 119 + end: 120 + raw: "\n" +- kind: + Keyword: Function + span: + start: 120 + end: 128 + raw: function +- kind: OpenParen + span: + start: 128 + end: 129 + raw: ( +- kind: CloseParen + span: + start: 129 + end: 130 + raw: ) +- kind: OpenBrace + span: + start: 131 + end: 132 + raw: "{" +- kind: Newline + span: + start: 132 + end: 133 + raw: "\n" +- kind: + Keyword: Var + span: + start: 134 + end: 137 + raw: var +- kind: Identifier + span: + start: 138 + end: 139 + raw: a +- kind: + Operator: Assign + span: + start: 140 + end: 141 + raw: "=" +- kind: + String: Double + span: + start: 142 + end: 151 + raw: outer_a +- kind: Semicolon + span: + start: 151 + end: 152 + raw: ; +- kind: Newline + span: + start: 152 + end: 153 + raw: "\n" +- kind: + Keyword: Var + span: + start: 154 + end: 157 + raw: var +- kind: Identifier + span: + start: 158 + end: 159 + raw: b +- kind: + Operator: Assign + span: + start: 160 + end: 161 + raw: "=" +- kind: + String: Double + span: + start: 162 + end: 171 + raw: outer_b +- kind: Semicolon + span: + start: 171 + end: 172 + raw: ; +- kind: Newline + span: + start: 172 + end: 173 + raw: "\n" +- kind: + Keyword: Var + span: + start: 174 + end: 177 + raw: var +- kind: Identifier + span: + start: 178 + end: 179 + raw: c +- kind: + Operator: Assign + span: + start: 180 + end: 181 + raw: "=" +- kind: + String: Double + span: + start: 182 + end: 191 + raw: outer_c +- kind: Semicolon + span: + start: 191 + end: 192 + raw: ; +- kind: Newline + span: + start: 192 + end: 193 + raw: "\n" +- kind: + Keyword: If + span: + start: 194 + end: 196 + raw: if +- kind: OpenParen + span: + start: 197 + end: 198 + raw: ( +- kind: + String: Double + span: + start: 198 + end: 201 + raw: a +- kind: CloseParen + span: + start: 201 + end: 202 + raw: ) +- kind: OpenBrace + span: + start: 203 + end: 204 + raw: "{" +- kind: Newline + span: + start: 204 + end: 205 + raw: "\n" +- kind: Identifier + span: + start: 207 + end: 208 + raw: a +- kind: + Operator: Assign + span: + start: 209 + end: 210 + raw: "=" +- kind: + String: Double + span: + start: 211 + end: 220 + raw: inner_a +- kind: Semicolon + span: + start: 220 + end: 221 + raw: ; +- kind: Newline + span: + start: 221 + end: 222 + raw: "\n" +- kind: + Keyword: Var + span: + start: 224 + end: 227 + raw: var +- kind: Identifier + span: + start: 228 + end: 229 + raw: b +- kind: + Operator: Assign + span: + start: 230 + end: 231 + raw: "=" +- kind: + String: Double + span: + start: 232 + end: 241 + raw: inner_b +- kind: Semicolon + span: + start: 241 + end: 242 + raw: ; +- kind: Newline + span: + start: 242 + end: 243 + raw: "\n" +- kind: CloseBrace + span: + start: 244 + end: 245 + raw: "}" +- kind: Newline + span: + start: 245 + end: 246 + raw: "\n" +- kind: CloseBrace + span: + start: 246 + end: 247 + raw: "}" +- kind: Newline + span: + start: 247 + end: 248 + raw: "\n" +- kind: Newline + span: + start: 248 + end: 249 + raw: "\n" +- kind: + Keyword: Function + span: + start: 249 + end: 257 + raw: function +- kind: OpenParen + span: + start: 257 + end: 258 + raw: ( +- kind: CloseParen + span: + start: 258 + end: 259 + raw: ) +- kind: OpenBrace + span: + start: 260 + end: 261 + raw: "{" +- kind: Newline + span: + start: 261 + end: 262 + raw: "\n" +- kind: + Keyword: Var + span: + start: 263 + end: 266 + raw: var +- kind: Identifier + span: + start: 267 + end: 268 + raw: a +- kind: + Operator: Assign + span: + start: 269 + end: 270 + raw: "=" +- kind: + String: Double + span: + start: 271 + end: 280 + raw: outer_a +- kind: Semicolon + span: + start: 280 + end: 281 + raw: ; +- kind: Newline + span: + start: 281 + end: 282 + raw: "\n" +- kind: + Keyword: Var + span: + start: 283 + end: 286 + raw: var +- kind: Identifier + span: + start: 287 + end: 288 + raw: b +- kind: + Operator: Assign + span: + start: 289 + end: 290 + raw: "=" +- kind: + String: Double + span: + start: 291 + end: 300 + raw: outer_b +- kind: Semicolon + span: + start: 300 + end: 301 + raw: ; +- kind: Newline + span: + start: 301 + end: 302 + raw: "\n" +- kind: + Keyword: Var + span: + start: 303 + end: 306 + raw: var +- kind: Identifier + span: + start: 307 + end: 308 + raw: c +- kind: + Operator: Assign + span: + start: 309 + end: 310 + raw: "=" +- kind: + String: Double + span: + start: 311 + end: 320 + raw: outer_c +- kind: Semicolon + span: + start: 320 + end: 321 + raw: ; +- kind: Newline + span: + start: 321 + end: 322 + raw: "\n" +- kind: + Keyword: If + span: + start: 323 + end: 325 + raw: if +- kind: OpenParen + span: + start: 326 + end: 327 + raw: ( +- kind: + Operator: LogicalNot + span: + start: 327 + end: 328 + raw: "!" +- kind: + String: Double + span: + start: 328 + end: 331 + raw: a +- kind: CloseParen + span: + start: 331 + end: 332 + raw: ) +- kind: OpenBrace + span: + start: 333 + end: 334 + raw: "{" +- kind: Newline + span: + start: 334 + end: 335 + raw: "\n" +- kind: CloseBrace + span: + start: 336 + end: 337 + raw: "}" +- kind: + Keyword: Else + span: + start: 338 + end: 342 + raw: else +- kind: OpenBrace + span: + start: 343 + end: 344 + raw: "{" +- kind: Newline + span: + start: 344 + end: 345 + raw: "\n" +- kind: Identifier + span: + start: 347 + end: 348 + raw: a +- kind: + Operator: Assign + span: + start: 349 + end: 350 + raw: "=" +- kind: + String: Double + span: + start: 351 + end: 360 + raw: inner_a +- kind: Semicolon + span: + start: 360 + end: 361 + raw: ; +- kind: Newline + span: + start: 361 + end: 362 + raw: "\n" +- kind: + Keyword: Var + span: + start: 364 + end: 367 + raw: var +- kind: Identifier + span: + start: 368 + end: 369 + raw: b +- kind: + Operator: Assign + span: + start: 370 + end: 371 + raw: "=" +- kind: + String: Double + span: + start: 372 + end: 381 + raw: inner_b +- kind: Semicolon + span: + start: 381 + end: 382 + raw: ; +- kind: Newline + span: + start: 382 + end: 383 + raw: "\n" +- kind: CloseBrace + span: + start: 384 + end: 385 + raw: "}" +- kind: Newline + span: + start: 385 + end: 386 + raw: "\n" +- kind: CloseBrace + span: + start: 386 + end: 387 + raw: "}" +- kind: Newline + span: + start: 387 + end: 388 + raw: "\n" +- kind: Newline + span: + start: 388 + end: 389 + raw: "\n" +- kind: + Keyword: Function + span: + start: 389 + end: 397 + raw: function +- kind: OpenParen + span: + start: 397 + end: 398 + raw: ( +- kind: CloseParen + span: + start: 398 + end: 399 + raw: ) +- kind: OpenBrace + span: + start: 400 + end: 401 + raw: "{" +- kind: Newline + span: + start: 401 + end: 402 + raw: "\n" +- kind: + Keyword: Var + span: + start: 403 + end: 406 + raw: var +- kind: Identifier + span: + start: 407 + end: 408 + raw: a +- kind: + Operator: Assign + span: + start: 409 + end: 410 + raw: "=" +- kind: + String: Double + span: + start: 411 + end: 420 + raw: outer_a +- kind: Semicolon + span: + start: 420 + end: 421 + raw: ; +- kind: Newline + span: + start: 421 + end: 422 + raw: "\n" +- kind: + Keyword: Var + span: + start: 423 + end: 426 + raw: var +- kind: Identifier + span: + start: 427 + end: 428 + raw: b +- kind: + Operator: Assign + span: + start: 429 + end: 430 + raw: "=" +- kind: + String: Double + span: + start: 431 + end: 440 + raw: outer_b +- kind: Semicolon + span: + start: 440 + end: 441 + raw: ; +- kind: Newline + span: + start: 441 + end: 442 + raw: "\n" +- kind: + Keyword: Var + span: + start: 443 + end: 446 + raw: var +- kind: Identifier + span: + start: 447 + end: 448 + raw: c +- kind: + Operator: Assign + span: + start: 449 + end: 450 + raw: "=" +- kind: + String: Double + span: + start: 451 + end: 460 + raw: outer_c +- kind: Semicolon + span: + start: 460 + end: 461 + raw: ; +- kind: Newline + span: + start: 461 + end: 462 + raw: "\n" +- kind: + Keyword: For + span: + start: 463 + end: 466 + raw: for +- kind: OpenParen + span: + start: 467 + end: 468 + raw: ( +- kind: + Keyword: Var + span: + start: 468 + end: 471 + raw: var +- kind: Identifier + span: + start: 472 + end: 473 + raw: i +- kind: + Operator: Assign + span: + start: 474 + end: 475 + raw: "=" +- kind: Integer + span: + start: 476 + end: 477 + raw: "0" +- kind: Semicolon + span: + start: 477 + end: 478 + raw: ; +- kind: Identifier + span: + start: 479 + end: 480 + raw: i +- kind: + Operator: LessThan + span: + start: 481 + end: 482 + raw: "<" +- kind: Integer + span: + start: 483 + end: 484 + raw: "1" +- kind: Semicolon + span: + start: 484 + end: 485 + raw: ; +- kind: Identifier + span: + start: 486 + end: 487 + raw: i +- kind: + Operator: Increment + span: + start: 487 + end: 489 + raw: ++ +- kind: CloseParen + span: + start: 489 + end: 490 + raw: ) +- kind: OpenBrace + span: + start: 491 + end: 492 + raw: "{" +- kind: Newline + span: + start: 492 + end: 493 + raw: "\n" +- kind: Identifier + span: + start: 495 + end: 496 + raw: a +- kind: + Operator: Assign + span: + start: 497 + end: 498 + raw: "=" +- kind: + String: Double + span: + start: 499 + end: 508 + raw: inner_a +- kind: Semicolon + span: + start: 508 + end: 509 + raw: ; +- kind: Newline + span: + start: 509 + end: 510 + raw: "\n" +- kind: + Keyword: Var + span: + start: 512 + end: 515 + raw: var +- kind: Identifier + span: + start: 516 + end: 517 + raw: b +- kind: + Operator: Assign + span: + start: 518 + end: 519 + raw: "=" +- kind: + String: Double + span: + start: 520 + end: 529 + raw: inner_b +- kind: Semicolon + span: + start: 529 + end: 530 + raw: ; +- kind: Newline + span: + start: 530 + end: 531 + raw: "\n" +- kind: CloseBrace + span: + start: 532 + end: 533 + raw: "}" +- kind: Newline + span: + start: 533 + end: 534 + raw: "\n" +- kind: CloseBrace + span: + start: 534 + end: 535 + raw: "}" +- kind: Newline + span: + start: 535 + end: 536 + raw: "\n" +- kind: Newline + span: + start: 536 + end: 537 + raw: "\n" +- kind: + Keyword: Function + span: + start: 537 + end: 545 + raw: function +- kind: OpenParen + span: + start: 545 + end: 546 + raw: ( +- kind: CloseParen + span: + start: 546 + end: 547 + raw: ) +- kind: OpenBrace + span: + start: 548 + end: 549 + raw: "{" +- kind: Newline + span: + start: 549 + end: 550 + raw: "\n" +- kind: + Keyword: Var + span: + start: 551 + end: 554 + raw: var +- kind: Identifier + span: + start: 555 + end: 556 + raw: a +- kind: + Operator: Assign + span: + start: 557 + end: 558 + raw: "=" +- kind: + String: Double + span: + start: 559 + end: 568 + raw: outer_a +- kind: Semicolon + span: + start: 568 + end: 569 + raw: ; +- kind: Newline + span: + start: 569 + end: 570 + raw: "\n" +- kind: + Keyword: Var + span: + start: 571 + end: 574 + raw: var +- kind: Identifier + span: + start: 575 + end: 576 + raw: b +- kind: + Operator: Assign + span: + start: 577 + end: 578 + raw: "=" +- kind: + String: Double + span: + start: 579 + end: 588 + raw: outer_b +- kind: Semicolon + span: + start: 588 + end: 589 + raw: ; +- kind: Newline + span: + start: 589 + end: 590 + raw: "\n" +- kind: + Keyword: Var + span: + start: 591 + end: 594 + raw: var +- kind: Identifier + span: + start: 595 + end: 596 + raw: c +- kind: + Operator: Assign + span: + start: 597 + end: 598 + raw: "=" +- kind: + String: Double + span: + start: 599 + end: 608 + raw: outer_c +- kind: Semicolon + span: + start: 608 + end: 609 + raw: ; +- kind: Newline + span: + start: 609 + end: 610 + raw: "\n" +- kind: + Keyword: Var + span: + start: 611 + end: 614 + raw: var +- kind: Identifier + span: + start: 615 + end: 616 + raw: i +- kind: + Operator: Assign + span: + start: 617 + end: 618 + raw: "=" +- kind: Integer + span: + start: 619 + end: 620 + raw: "0" +- kind: Semicolon + span: + start: 620 + end: 621 + raw: ; +- kind: Newline + span: + start: 621 + end: 622 + raw: "\n" +- kind: + Keyword: While + span: + start: 623 + end: 628 + raw: while +- kind: OpenParen + span: + start: 629 + end: 630 + raw: ( +- kind: Identifier + span: + start: 630 + end: 631 + raw: i +- kind: + Operator: Increment + span: + start: 631 + end: 633 + raw: ++ +- kind: + Operator: LessThan + span: + start: 634 + end: 635 + raw: "<" +- kind: Integer + span: + start: 636 + end: 637 + raw: "1" +- kind: CloseParen + span: + start: 637 + end: 638 + raw: ) +- kind: OpenBrace + span: + start: 639 + end: 640 + raw: "{" +- kind: Newline + span: + start: 640 + end: 641 + raw: "\n" +- kind: Identifier + span: + start: 643 + end: 644 + raw: a +- kind: + Operator: Assign + span: + start: 645 + end: 646 + raw: "=" +- kind: + String: Double + span: + start: 647 + end: 656 + raw: inner_a +- kind: Semicolon + span: + start: 656 + end: 657 + raw: ; +- kind: Newline + span: + start: 657 + end: 658 + raw: "\n" +- kind: + Keyword: Var + span: + start: 660 + end: 663 + raw: var +- kind: Identifier + span: + start: 664 + end: 665 + raw: b +- kind: + Operator: Assign + span: + start: 666 + end: 667 + raw: "=" +- kind: + String: Double + span: + start: 668 + end: 677 + raw: inner_b +- kind: Semicolon + span: + start: 677 + end: 678 + raw: ; +- kind: Newline + span: + start: 678 + end: 679 + raw: "\n" +- kind: CloseBrace + span: + start: 680 + end: 681 + raw: "}" +- kind: Newline + span: + start: 681 + end: 682 + raw: "\n" +- kind: CloseBrace + span: + start: 682 + end: 683 + raw: "}" +- kind: Newline + span: + start: 683 + end: 684 + raw: "\n" +- kind: Newline + span: + start: 684 + end: 685 + raw: "\n" +- kind: + Keyword: Function + span: + start: 685 + end: 693 + raw: function +- kind: OpenParen + span: + start: 693 + end: 694 + raw: ( +- kind: CloseParen + span: + start: 694 + end: 695 + raw: ) +- kind: OpenBrace + span: + start: 696 + end: 697 + raw: "{" +- kind: Newline + span: + start: 697 + end: 698 + raw: "\n" +- kind: + Keyword: Var + span: + start: 699 + end: 702 + raw: var +- kind: Identifier + span: + start: 703 + end: 704 + raw: a +- kind: + Operator: Assign + span: + start: 705 + end: 706 + raw: "=" +- kind: + String: Double + span: + start: 707 + end: 716 + raw: outer_a +- kind: Semicolon + span: + start: 716 + end: 717 + raw: ; +- kind: Newline + span: + start: 717 + end: 718 + raw: "\n" +- kind: + Keyword: Var + span: + start: 719 + end: 722 + raw: var +- kind: Identifier + span: + start: 723 + end: 724 + raw: b +- kind: + Operator: Assign + span: + start: 725 + end: 726 + raw: "=" +- kind: + String: Double + span: + start: 727 + end: 736 + raw: outer_b +- kind: Semicolon + span: + start: 736 + end: 737 + raw: ; +- kind: Newline + span: + start: 737 + end: 738 + raw: "\n" +- kind: + Keyword: Var + span: + start: 739 + end: 742 + raw: var +- kind: Identifier + span: + start: 743 + end: 744 + raw: c +- kind: + Operator: Assign + span: + start: 745 + end: 746 + raw: "=" +- kind: + String: Double + span: + start: 747 + end: 756 + raw: outer_c +- kind: Semicolon + span: + start: 756 + end: 757 + raw: ; +- kind: Newline + span: + start: 757 + end: 758 + raw: "\n" +- kind: + Keyword: Switch + span: + start: 759 + end: 765 + raw: switch +- kind: OpenParen + span: + start: 766 + end: 767 + raw: ( +- kind: Integer + span: + start: 767 + end: 768 + raw: "1" +- kind: CloseParen + span: + start: 768 + end: 769 + raw: ) +- kind: OpenBrace + span: + start: 770 + end: 771 + raw: "{" +- kind: Newline + span: + start: 771 + end: 772 + raw: "\n" +- kind: + Keyword: Case + span: + start: 774 + end: 778 + raw: case +- kind: Integer + span: + start: 779 + end: 780 + raw: "1" +- kind: Colon + span: + start: 780 + end: 781 + raw: ":" +- kind: Newline + span: + start: 781 + end: 782 + raw: "\n" +- kind: Identifier + span: + start: 785 + end: 786 + raw: a +- kind: + Operator: Assign + span: + start: 787 + end: 788 + raw: "=" +- kind: + String: Double + span: + start: 789 + end: 798 + raw: inner_a +- kind: Semicolon + span: + start: 798 + end: 799 + raw: ; +- kind: Newline + span: + start: 799 + end: 800 + raw: "\n" +- kind: + Keyword: Var + span: + start: 803 + end: 806 + raw: var +- kind: Identifier + span: + start: 807 + end: 808 + raw: b +- kind: + Operator: Assign + span: + start: 809 + end: 810 + raw: "=" +- kind: + String: Double + span: + start: 811 + end: 820 + raw: inner_b +- kind: Semicolon + span: + start: 820 + end: 821 + raw: ; +- kind: Newline + span: + start: 821 + end: 822 + raw: "\n" +- kind: + Keyword: Break + span: + start: 825 + end: 830 + raw: break +- kind: Semicolon + span: + start: 830 + end: 831 + raw: ; +- kind: Newline + span: + start: 831 + end: 832 + raw: "\n" +- kind: CloseBrace + span: + start: 833 + end: 834 + raw: "}" +- kind: Newline + span: + start: 834 + end: 835 + raw: "\n" +- kind: CloseBrace + span: + start: 835 + end: 836 + raw: "}" +- kind: Newline + span: + start: 836 + end: 837 + raw: "\n" +- kind: Newline + span: + start: 837 + end: 838 + raw: "\n" +- kind: + Keyword: Function + span: + start: 838 + end: 846 + raw: function +- kind: OpenParen + span: + start: 846 + end: 847 + raw: ( +- kind: CloseParen + span: + start: 847 + end: 848 + raw: ) +- kind: OpenBrace + span: + start: 849 + end: 850 + raw: "{" +- kind: Newline + span: + start: 850 + end: 851 + raw: "\n" +- kind: + Keyword: Var + span: + start: 852 + end: 855 + raw: var +- kind: Identifier + span: + start: 856 + end: 857 + raw: a +- kind: + Operator: Assign + span: + start: 858 + end: 859 + raw: "=" +- kind: + String: Double + span: + start: 860 + end: 869 + raw: outer_a +- kind: Semicolon + span: + start: 869 + end: 870 + raw: ; +- kind: Newline + span: + start: 870 + end: 871 + raw: "\n" +- kind: + Keyword: Var + span: + start: 872 + end: 875 + raw: var +- kind: Identifier + span: + start: 876 + end: 877 + raw: b +- kind: + Operator: Assign + span: + start: 878 + end: 879 + raw: "=" +- kind: + String: Double + span: + start: 880 + end: 889 + raw: outer_b +- kind: Semicolon + span: + start: 889 + end: 890 + raw: ; +- kind: Newline + span: + start: 890 + end: 891 + raw: "\n" +- kind: + Keyword: Var + span: + start: 892 + end: 895 + raw: var +- kind: Identifier + span: + start: 896 + end: 897 + raw: c +- kind: + Operator: Assign + span: + start: 898 + end: 899 + raw: "=" +- kind: + String: Double + span: + start: 900 + end: 909 + raw: outer_c +- kind: Semicolon + span: + start: 909 + end: 910 + raw: ; +- kind: Newline + span: + start: 910 + end: 911 + raw: "\n" +- kind: + Keyword: Try + span: + start: 912 + end: 915 + raw: try +- kind: OpenBrace + span: + start: 916 + end: 917 + raw: "{" +- kind: Newline + span: + start: 917 + end: 918 + raw: "\n" +- kind: + Keyword: Throw + span: + start: 920 + end: 925 + raw: throw +- kind: + String: Double + span: + start: 926 + end: 931 + raw: err +- kind: Semicolon + span: + start: 931 + end: 932 + raw: ; +- kind: Newline + span: + start: 932 + end: 933 + raw: "\n" +- kind: CloseBrace + span: + start: 934 + end: 935 + raw: "}" +- kind: + Keyword: Catch + span: + start: 936 + end: 941 + raw: catch +- kind: OpenParen + span: + start: 942 + end: 943 + raw: ( +- kind: Identifier + span: + start: 943 + end: 944 + raw: e +- kind: CloseParen + span: + start: 944 + end: 945 + raw: ) +- kind: OpenBrace + span: + start: 946 + end: 947 + raw: "{" +- kind: Newline + span: + start: 947 + end: 948 + raw: "\n" +- kind: Identifier + span: + start: 950 + end: 951 + raw: a +- kind: + Operator: Assign + span: + start: 952 + end: 953 + raw: "=" +- kind: + String: Double + span: + start: 954 + end: 963 + raw: inner_a +- kind: Semicolon + span: + start: 963 + end: 964 + raw: ; +- kind: Newline + span: + start: 964 + end: 965 + raw: "\n" +- kind: + Keyword: Var + span: + start: 967 + end: 970 + raw: var +- kind: Identifier + span: + start: 971 + end: 972 + raw: b +- kind: + Operator: Assign + span: + start: 973 + end: 974 + raw: "=" +- kind: + String: Double + span: + start: 975 + end: 984 + raw: inner_b +- kind: Semicolon + span: + start: 984 + end: 985 + raw: ; +- kind: Newline + span: + start: 985 + end: 986 + raw: "\n" +- kind: CloseBrace + span: + start: 987 + end: 988 + raw: "}" +- kind: Newline + span: + start: 988 + end: 989 + raw: "\n" +- kind: CloseBrace + span: + start: 989 + end: 990 + raw: "}" +- kind: Newline + span: + start: 990 + end: 991 + raw: "\n" +- kind: Newline + span: + start: 991 + end: 992 + raw: "\n" +- kind: + Keyword: Function + span: + start: 992 + end: 1000 + raw: function +- kind: OpenParen + span: + start: 1000 + end: 1001 + raw: ( +- kind: CloseParen + span: + start: 1001 + end: 1002 + raw: ) +- kind: OpenBrace + span: + start: 1003 + end: 1004 + raw: "{" +- kind: Newline + span: + start: 1004 + end: 1005 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1006 + end: 1009 + raw: var +- kind: Identifier + span: + start: 1010 + end: 1011 + raw: a +- kind: + Operator: Assign + span: + start: 1012 + end: 1013 + raw: "=" +- kind: + String: Double + span: + start: 1014 + end: 1023 + raw: outer_a +- kind: Semicolon + span: + start: 1023 + end: 1024 + raw: ; +- kind: Newline + span: + start: 1024 + end: 1025 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1026 + end: 1029 + raw: var +- kind: Identifier + span: + start: 1030 + end: 1031 + raw: b +- kind: + Operator: Assign + span: + start: 1032 + end: 1033 + raw: "=" +- kind: + String: Double + span: + start: 1034 + end: 1043 + raw: outer_b +- kind: Semicolon + span: + start: 1043 + end: 1044 + raw: ; +- kind: Newline + span: + start: 1044 + end: 1045 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1046 + end: 1049 + raw: var +- kind: Identifier + span: + start: 1050 + end: 1051 + raw: c +- kind: + Operator: Assign + span: + start: 1052 + end: 1053 + raw: "=" +- kind: + String: Double + span: + start: 1054 + end: 1063 + raw: outer_c +- kind: Semicolon + span: + start: 1063 + end: 1064 + raw: ; +- kind: Newline + span: + start: 1064 + end: 1065 + raw: "\n" +- kind: + Keyword: Try + span: + start: 1066 + end: 1069 + raw: try +- kind: OpenBrace + span: + start: 1070 + end: 1071 + raw: "{" +- kind: Newline + span: + start: 1071 + end: 1072 + raw: "\n" +- kind: Identifier + span: + start: 1074 + end: 1075 + raw: a +- kind: + Operator: Assign + span: + start: 1076 + end: 1077 + raw: "=" +- kind: + String: Double + span: + start: 1078 + end: 1085 + raw: try_a +- kind: Semicolon + span: + start: 1085 + end: 1086 + raw: ; +- kind: Newline + span: + start: 1086 + end: 1087 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1089 + end: 1092 + raw: var +- kind: Identifier + span: + start: 1093 + end: 1094 + raw: b +- kind: + Operator: Assign + span: + start: 1095 + end: 1096 + raw: "=" +- kind: + String: Double + span: + start: 1097 + end: 1104 + raw: try_b +- kind: Semicolon + span: + start: 1104 + end: 1105 + raw: ; +- kind: Newline + span: + start: 1105 + end: 1106 + raw: "\n" +- kind: CloseBrace + span: + start: 1107 + end: 1108 + raw: "}" +- kind: + Keyword: Finally + span: + start: 1109 + end: 1116 + raw: finally +- kind: OpenBrace + span: + start: 1117 + end: 1118 + raw: "{" +- kind: Newline + span: + start: 1118 + end: 1119 + raw: "\n" +- kind: Identifier + span: + start: 1121 + end: 1122 + raw: a +- kind: + Operator: Assign + span: + start: 1123 + end: 1124 + raw: "=" +- kind: + String: Double + span: + start: 1125 + end: 1136 + raw: finally_a +- kind: Semicolon + span: + start: 1136 + end: 1137 + raw: ; +- kind: Newline + span: + start: 1137 + end: 1138 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1140 + end: 1143 + raw: var +- kind: Identifier + span: + start: 1144 + end: 1145 + raw: b +- kind: + Operator: Assign + span: + start: 1146 + end: 1147 + raw: "=" +- kind: + String: Double + span: + start: 1148 + end: 1159 + raw: finally_b +- kind: Semicolon + span: + start: 1159 + end: 1160 + raw: ; +- kind: Newline + span: + start: 1160 + end: 1161 + raw: "\n" +- kind: CloseBrace + span: + start: 1162 + end: 1163 + raw: "}" +- kind: Newline + span: + start: 1163 + end: 1164 + raw: "\n" +- kind: CloseBrace + span: + start: 1164 + end: 1165 + raw: "}" +- kind: Newline + span: + start: 1165 + end: 1166 + raw: "\n" +- kind: Newline + span: + start: 1166 + end: 1167 + raw: "\n" +- kind: + Keyword: Function + span: + start: 1167 + end: 1175 + raw: function +- kind: OpenParen + span: + start: 1175 + end: 1176 + raw: ( +- kind: CloseParen + span: + start: 1176 + end: 1177 + raw: ) +- kind: OpenBrace + span: + start: 1178 + end: 1179 + raw: "{" +- kind: Newline + span: + start: 1179 + end: 1180 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1181 + end: 1184 + raw: var +- kind: Identifier + span: + start: 1185 + end: 1186 + raw: a +- kind: + Operator: Assign + span: + start: 1187 + end: 1188 + raw: "=" +- kind: + String: Double + span: + start: 1189 + end: 1198 + raw: outer_a +- kind: Semicolon + span: + start: 1198 + end: 1199 + raw: ; +- kind: Newline + span: + start: 1199 + end: 1200 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1201 + end: 1204 + raw: var +- kind: Identifier + span: + start: 1205 + end: 1206 + raw: b +- kind: + Operator: Assign + span: + start: 1207 + end: 1208 + raw: "=" +- kind: + String: Double + span: + start: 1209 + end: 1218 + raw: outer_b +- kind: Semicolon + span: + start: 1218 + end: 1219 + raw: ; +- kind: Newline + span: + start: 1219 + end: 1220 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1221 + end: 1224 + raw: var +- kind: Identifier + span: + start: 1225 + end: 1226 + raw: c +- kind: + Operator: Assign + span: + start: 1227 + end: 1228 + raw: "=" +- kind: + String: Double + span: + start: 1229 + end: 1238 + raw: outer_c +- kind: Semicolon + span: + start: 1238 + end: 1239 + raw: ; +- kind: Newline + span: + start: 1239 + end: 1240 + raw: "\n" +- kind: + Keyword: Function + span: + start: 1241 + end: 1249 + raw: function +- kind: Identifier + span: + start: 1250 + end: 1255 + raw: inner +- kind: OpenParen + span: + start: 1255 + end: 1256 + raw: ( +- kind: CloseParen + span: + start: 1256 + end: 1257 + raw: ) +- kind: OpenBrace + span: + start: 1258 + end: 1259 + raw: "{" +- kind: Newline + span: + start: 1259 + end: 1260 + raw: "\n" +- kind: Identifier + span: + start: 1262 + end: 1263 + raw: a +- kind: + Operator: Assign + span: + start: 1264 + end: 1265 + raw: "=" +- kind: + String: Double + span: + start: 1266 + end: 1275 + raw: inner_a +- kind: Semicolon + span: + start: 1275 + end: 1276 + raw: ; +- kind: Newline + span: + start: 1276 + end: 1277 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1279 + end: 1282 + raw: var +- kind: Identifier + span: + start: 1283 + end: 1284 + raw: b +- kind: + Operator: Assign + span: + start: 1285 + end: 1286 + raw: "=" +- kind: + String: Double + span: + start: 1287 + end: 1296 + raw: inner_b +- kind: Semicolon + span: + start: 1296 + end: 1297 + raw: ; +- kind: Newline + span: + start: 1297 + end: 1298 + raw: "\n" +- kind: CloseBrace + span: + start: 1299 + end: 1300 + raw: "}" +- kind: Newline + span: + start: 1300 + end: 1301 + raw: "\n" +- kind: Identifier + span: + start: 1302 + end: 1307 + raw: inner +- kind: OpenParen + span: + start: 1307 + end: 1308 + raw: ( +- kind: CloseParen + span: + start: 1308 + end: 1309 + raw: ) +- kind: Semicolon + span: + start: 1309 + end: 1310 + raw: ; +- kind: Newline + span: + start: 1310 + end: 1311 + raw: "\n" +- kind: CloseBrace + span: + start: 1311 + end: 1312 + raw: "}" +- kind: Newline + span: + start: 1312 + end: 1313 + raw: "\n" +- kind: Newline + span: + start: 1313 + end: 1314 + raw: "\n" +- kind: + Keyword: Function + span: + start: 1314 + end: 1322 + raw: function +- kind: OpenParen + span: + start: 1322 + end: 1323 + raw: ( +- kind: CloseParen + span: + start: 1323 + end: 1324 + raw: ) +- kind: OpenBrace + span: + start: 1325 + end: 1326 + raw: "{" +- kind: Newline + span: + start: 1326 + end: 1327 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1328 + end: 1331 + raw: var +- kind: Identifier + span: + start: 1332 + end: 1333 + raw: a +- kind: + Operator: Assign + span: + start: 1334 + end: 1335 + raw: "=" +- kind: + String: Double + span: + start: 1336 + end: 1345 + raw: outer_a +- kind: Semicolon + span: + start: 1345 + end: 1346 + raw: ; +- kind: Newline + span: + start: 1346 + end: 1347 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1348 + end: 1351 + raw: var +- kind: Identifier + span: + start: 1352 + end: 1353 + raw: b +- kind: + Operator: Assign + span: + start: 1354 + end: 1355 + raw: "=" +- kind: + String: Double + span: + start: 1356 + end: 1365 + raw: outer_b +- kind: Semicolon + span: + start: 1365 + end: 1366 + raw: ; +- kind: Newline + span: + start: 1366 + end: 1367 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1368 + end: 1371 + raw: var +- kind: Identifier + span: + start: 1372 + end: 1373 + raw: c +- kind: + Operator: Assign + span: + start: 1374 + end: 1375 + raw: "=" +- kind: + String: Double + span: + start: 1376 + end: 1385 + raw: outer_c +- kind: Semicolon + span: + start: 1385 + end: 1386 + raw: ; +- kind: Newline + span: + start: 1386 + end: 1387 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1388 + end: 1391 + raw: var +- kind: Identifier + span: + start: 1392 + end: 1395 + raw: obj +- kind: + Operator: Assign + span: + start: 1396 + end: 1397 + raw: "=" +- kind: OpenBrace + span: + start: 1398 + end: 1399 + raw: "{" +- kind: Identifier + span: + start: 1400 + end: 1401 + raw: x +- kind: Colon + span: + start: 1401 + end: 1402 + raw: ":" +- kind: Integer + span: + start: 1403 + end: 1404 + raw: "1" +- kind: CloseBrace + span: + start: 1405 + end: 1406 + raw: "}" +- kind: Semicolon + span: + start: 1406 + end: 1407 + raw: ; +- kind: Newline + span: + start: 1407 + end: 1408 + raw: "\n" +- kind: + Keyword: For + span: + start: 1409 + end: 1412 + raw: for +- kind: OpenParen + span: + start: 1413 + end: 1414 + raw: ( +- kind: + Keyword: Var + span: + start: 1414 + end: 1417 + raw: var +- kind: Identifier + span: + start: 1418 + end: 1419 + raw: k +- kind: + Keyword: In + span: + start: 1420 + end: 1422 + raw: in +- kind: Identifier + span: + start: 1423 + end: 1426 + raw: obj +- kind: CloseParen + span: + start: 1426 + end: 1427 + raw: ) +- kind: OpenBrace + span: + start: 1428 + end: 1429 + raw: "{" +- kind: Newline + span: + start: 1429 + end: 1430 + raw: "\n" +- kind: Identifier + span: + start: 1432 + end: 1433 + raw: a +- kind: + Operator: Assign + span: + start: 1434 + end: 1435 + raw: "=" +- kind: + String: Double + span: + start: 1436 + end: 1445 + raw: inner_a +- kind: Semicolon + span: + start: 1445 + end: 1446 + raw: ; +- kind: Newline + span: + start: 1446 + end: 1447 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1449 + end: 1452 + raw: var +- kind: Identifier + span: + start: 1453 + end: 1454 + raw: b +- kind: + Operator: Assign + span: + start: 1455 + end: 1456 + raw: "=" +- kind: + String: Double + span: + start: 1457 + end: 1466 + raw: inner_b +- kind: Semicolon + span: + start: 1466 + end: 1467 + raw: ; +- kind: Newline + span: + start: 1467 + end: 1468 + raw: "\n" +- kind: CloseBrace + span: + start: 1469 + end: 1470 + raw: "}" +- kind: Newline + span: + start: 1470 + end: 1471 + raw: "\n" +- kind: CloseBrace + span: + start: 1471 + end: 1472 + raw: "}" +- kind: Newline + span: + start: 1472 + end: 1473 + raw: "\n" +- kind: Newline + span: + start: 1473 + end: 1474 + raw: "\n" +- kind: + Keyword: Function + span: + start: 1474 + end: 1482 + raw: function +- kind: OpenParen + span: + start: 1482 + end: 1483 + raw: ( +- kind: CloseParen + span: + start: 1483 + end: 1484 + raw: ) +- kind: OpenBrace + span: + start: 1485 + end: 1486 + raw: "{" +- kind: Newline + span: + start: 1486 + end: 1487 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1488 + end: 1491 + raw: var +- kind: Identifier + span: + start: 1492 + end: 1493 + raw: a +- kind: + Operator: Assign + span: + start: 1494 + end: 1495 + raw: "=" +- kind: + String: Double + span: + start: 1496 + end: 1505 + raw: outer_a +- kind: Semicolon + span: + start: 1505 + end: 1506 + raw: ; +- kind: Newline + span: + start: 1506 + end: 1507 + raw: "\n" +- kind: + Keyword: Function + span: + start: 1508 + end: 1516 + raw: function +- kind: Identifier + span: + start: 1517 + end: 1522 + raw: inner +- kind: OpenParen + span: + start: 1522 + end: 1523 + raw: ( +- kind: CloseParen + span: + start: 1523 + end: 1524 + raw: ) +- kind: OpenBrace + span: + start: 1525 + end: 1526 + raw: "{" +- kind: Newline + span: + start: 1526 + end: 1527 + raw: "\n" +- kind: Identifier + span: + start: 1616 + end: 1621 + raw: trace +- kind: OpenParen + span: + start: 1621 + end: 1622 + raw: ( +- kind: Identifier + span: + start: 1622 + end: 1626 + raw: eval +- kind: OpenParen + span: + start: 1626 + end: 1627 + raw: ( +- kind: Identifier + span: + start: 1627 + end: 1628 + raw: a +- kind: CloseParen + span: + start: 1628 + end: 1629 + raw: ) +- kind: CloseParen + span: + start: 1629 + end: 1630 + raw: ) +- kind: Semicolon + span: + start: 1630 + end: 1631 + raw: ; +- kind: Newline + span: + start: 1631 + end: 1632 + raw: "\n" +- kind: CloseBrace + span: + start: 1633 + end: 1634 + raw: "}" +- kind: Newline + span: + start: 1634 + end: 1635 + raw: "\n" +- kind: Identifier + span: + start: 1636 + end: 1641 + raw: inner +- kind: OpenParen + span: + start: 1641 + end: 1642 + raw: ( +- kind: CloseParen + span: + start: 1642 + end: 1643 + raw: ) +- kind: Semicolon + span: + start: 1643 + end: 1644 + raw: ; +- kind: Newline + span: + start: 1644 + end: 1645 + raw: "\n" +- kind: CloseBrace + span: + start: 1645 + end: 1646 + raw: "}" +- kind: Newline + span: + start: 1646 + end: 1647 + raw: "\n" +- kind: Newline + span: + start: 1647 + end: 1648 + raw: "\n" +- kind: + Keyword: Function + span: + start: 1648 + end: 1656 + raw: function +- kind: OpenParen + span: + start: 1656 + end: 1657 + raw: ( +- kind: CloseParen + span: + start: 1657 + end: 1658 + raw: ) +- kind: OpenBrace + span: + start: 1659 + end: 1660 + raw: "{" +- kind: Newline + span: + start: 1660 + end: 1661 + raw: "\n" +- kind: + Keyword: Var + span: + start: 1662 + end: 1665 + raw: var +- kind: Identifier + span: + start: 1666 + end: 1667 + raw: a +- kind: + Operator: Assign + span: + start: 1668 + end: 1669 + raw: "=" +- kind: + String: Double + span: + start: 1670 + end: 1673 + raw: a +- kind: Semicolon + span: + start: 1673 + end: 1674 + raw: ; +- kind: Newline + span: + start: 1674 + end: 1675 + raw: "\n" +- kind: + Keyword: Function + span: + start: 1763 + end: 1771 + raw: function +- kind: OpenParen + span: + start: 1771 + end: 1772 + raw: ( +- kind: CloseParen + span: + start: 1772 + end: 1773 + raw: ) +- kind: OpenBrace + span: + start: 1774 + end: 1775 + raw: "{" +- kind: Newline + span: + start: 1775 + end: 1776 + raw: "\n" +- kind: + Keyword: With + span: + start: 1778 + end: 1782 + raw: with +- kind: OpenParen + span: + start: 1782 + end: 1783 + raw: ( +- kind: Identifier + span: + start: 1783 + end: 1790 + raw: _global +- kind: CloseParen + span: + start: 1790 + end: 1791 + raw: ) +- kind: OpenBrace + span: + start: 1792 + end: 1793 + raw: "{" +- kind: CloseBrace + span: + start: 1793 + end: 1794 + raw: "}" +- kind: Newline + span: + start: 1794 + end: 1795 + raw: "\n" +- kind: CloseBrace + span: + start: 1796 + end: 1797 + raw: "}" +- kind: Newline + span: + start: 1797 + end: 1798 + raw: "\n" +- kind: CloseBrace + span: + start: 1798 + end: 1799 + raw: "}" +- kind: Newline + span: + start: 1799 + end: 1800 + raw: "\n" diff --git a/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@simplifier.as.snap b/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@simplifier.as.snap new file mode 100644 index 0000000..886f28c --- /dev/null +++ b/crates/rascal/src/internal/as2/lexer/snapshots/rascal__internal__as2__lexer__tests__all_samples@simplifier.as.snap @@ -0,0 +1,77 @@ +--- +source: crates/rascal/src/internal/as2/lexer/tests.rs +expression: tokens +input_file: samples/as2/simplifier.as +--- +- kind: Identifier + span: + start: 0 + end: 5 + raw: trace +- kind: OpenParen + span: + start: 5 + end: 6 + raw: ( +- kind: + Operator: LogicalNot + span: + start: 6 + end: 7 + raw: "!" +- kind: Identifier + span: + start: 7 + end: 11 + raw: "true" +- kind: CloseParen + span: + start: 11 + end: 12 + raw: ) +- kind: Semicolon + span: + start: 12 + end: 13 + raw: ; +- kind: Newline + span: + start: 13 + end: 14 + raw: "\n" +- kind: Identifier + span: + start: 14 + end: 19 + raw: trace +- kind: OpenParen + span: + start: 19 + end: 20 + raw: ( +- kind: + Operator: LogicalNot + span: + start: 20 + end: 21 + raw: "!" +- kind: Identifier + span: + start: 21 + end: 26 + raw: "false" +- kind: CloseParen + span: + start: 26 + end: 27 + raw: ) +- kind: Semicolon + span: + start: 27 + end: 28 + raw: ; +- kind: Newline + span: + start: 28 + end: 29 + raw: "\n" diff --git a/crates/rascal/src/internal/as2/resolver.rs b/crates/rascal/src/internal/as2/resolver.rs index 16fc57e..6a2eeec 100644 --- a/crates/rascal/src/internal/as2/resolver.rs +++ b/crates/rascal/src/internal/as2/resolver.rs @@ -4,6 +4,7 @@ mod special_properties; use crate::internal::as2::error::ParsingError; use crate::internal::as2::global_types::GLOBAL_TYPES; use crate::internal::as2::hir; +use crate::internal::as2::hir::scope::Scope; use crate::internal::as2::resolver::special_functions::resolve_special_call; use crate::internal::as2::{ast, type_path_to_file_path}; use crate::internal::span::{Span, Spanned}; @@ -55,7 +56,7 @@ impl<'a> ModuleContext<'a> { } else { Box::new(hir::Expr::new( span, - hir::ExprKind::Constant(hir::ConstantKind::This), + hir::ExprKind::Constant(hir::ConstantKind::Identifier("this".to_owned())), )) }; return Some(hir::Expr::new( @@ -135,7 +136,9 @@ pub fn resolve_hir( ) -> (hir::Document, Vec, IndexSet) { let mut context = ModuleContext::new(provider, is_script, expected_name.to_owned()); let document = if is_script { - hir::Document::Script(resolve_statement_vec(&mut context, &ast.statements)) + let mut statements = resolve_statement_vec(&mut context, &ast.statements); + let scope = Scope::for_root(&mut statements); + hir::Document::Script { statements, scope } } else { resolve_class_or_interface(&mut context, &ast.statements, expected_name) }; @@ -269,6 +272,7 @@ fn resolve_interface( .map(|arg| hir::FunctionArgument { name: arg.name.to_owned(), type_name: resolve_opt_type_name(context, &arg.type_name), + register: None, }) .collect(), return_type: resolve_opt_type_name(context, &function.return_type), @@ -453,10 +457,10 @@ fn resolve_class( .unwrap_or_else(|| hir::Function { signature: hir::FunctionSignature { name: Some(class_name.clone()), - args: vec![], - return_type: None, + ..Default::default() }, body: vec![], // TODO super() + ..Default::default() }); hir::Class { @@ -479,12 +483,22 @@ fn resolve_statement_box( fn resolve_statement(context: &mut ModuleContext, input: &ast::Statement) -> hir::StatementKind { match &input.value { - ast::StatementKind::Declare(declarations) => hir::StatementKind::Declare( - declarations - .iter() - .map(|d| resolve_declaration(context, d)) - .collect(), - ), + ast::StatementKind::Declare(declarations) => { + if let Some(declaration) = declarations.first() + && declarations.len() == 1 + { + hir::StatementKind::Declare(Box::new(resolve_declaration(context, declaration))) + } else { + hir::StatementKind::Block( + declarations + .iter() + .map(|d| { + hir::StatementKind::Declare(Box::new(resolve_declaration(context, d))) + }) + .collect(), + ) + } + } ast::StatementKind::Return(values) => { hir::StatementKind::Return(resolve_expr_vec(context, values)) } @@ -737,7 +751,7 @@ fn resolve_expr(context: &mut ModuleContext, input: &ast::Expr) -> hir::Expr { input.span, ); } - hir::ExprKind::Function(resolve_function(context, function, false)) + hir::ExprKind::Function(Box::new(resolve_function(context, function, false))) } ast::ExprKind::GetVariable(name) => { hir::ExprKind::GetVariable(resolve_expr_box(context, name)) @@ -847,24 +861,29 @@ fn resolve_function( ), )])) } + let args = input + .signature + .args + .iter() + .map(|arg| hir::FunctionArgument { + name: arg.name.to_owned(), + type_name: resolve_opt_type_name(context, &arg.type_name), + register: None, + }) + .collect(); + let scope = Scope::for_function(&args, &mut body); hir::Function { signature: hir::FunctionSignature { name: input .signature .name .map(|name| Spanned::new(name.span, name.value.to_owned())), - args: input - .signature - .args - .iter() - .map(|arg| hir::FunctionArgument { - name: arg.name.to_owned(), - type_name: resolve_opt_type_name(context, &arg.type_name), - }) - .collect(), + args, return_type: resolve_opt_type_name(context, &input.signature.return_type), }, body, + scope, + ..Default::default() } } diff --git a/crates/rascal/src/internal/as2_codegen/access.rs b/crates/rascal/src/internal/as2_codegen/access.rs index 2443693..3bde120 100644 --- a/crates/rascal/src/internal/as2_codegen/access.rs +++ b/crates/rascal/src/internal/as2_codegen/access.rs @@ -10,6 +10,7 @@ pub enum VariableAccess { Variable, Object, Direct, + Register(u8), SpecialProperty, } @@ -57,7 +58,6 @@ impl VariableAccess { ConstantKind::Identifier(identifier) => { Self::for_identifier(context, builder, identifier) } - ConstantKind::This => Self::for_identifier(context, builder, "this"), ConstantKind::Float(value) => { builder.push(*value); VariableAccess::Direct @@ -70,6 +70,7 @@ impl VariableAccess { builder.push(*value); VariableAccess::Direct } + ConstantKind::Register(value) => VariableAccess::Register(*value), } } @@ -106,6 +107,9 @@ impl VariableAccess { VariableAccess::SpecialProperty => { builder.action(Action::GetProperty); } + VariableAccess::Register(register) => { + builder.push(PushValue::Register(*register)); + } } } @@ -123,6 +127,10 @@ impl VariableAccess { VariableAccess::SpecialProperty => { builder.action(Action::SetProperty); } + VariableAccess::Register(register) => { + builder.action(Action::StoreRegister(*register)); + builder.action(Action::Pop); + } } } @@ -146,6 +154,9 @@ impl VariableAccess { builder.action(Action::SetProperty); builder.push(PushValue::Register(0)); } + VariableAccess::Register(register) => { + builder.action(Action::StoreRegister(*register)); + } } } @@ -164,6 +175,9 @@ impl VariableAccess { // This actually generated invalid pcode in Flash... Not sure I care to replicate that. unimplemented!("Cannot get-and-set a special property") } + VariableAccess::Register(_) => { + builder.push(false); + } } } @@ -182,6 +196,11 @@ impl VariableAccess { // This actually generated invalid pcode in Flash... Not sure I care to replicate that. unimplemented!("Cannot call new on a special property") } + VariableAccess::Register(register) => { + builder.push(PushValue::Register(*register)); + builder.push(PushValue::Undefined); + builder.action_with_stack_delta(Action::NewMethod, -num_args - 2); + } } } @@ -200,6 +219,11 @@ impl VariableAccess { // This actually generated invalid pcode in Flash... Not sure I care to replicate that. unimplemented!("Cannot call a special property") } + VariableAccess::Register(register) => { + builder.push(PushValue::Register(*register)); + builder.push(PushValue::Undefined); + builder.action_with_stack_delta(Action::CallMethod, -num_args - 2); + } } } } diff --git a/crates/rascal/src/internal/as2_codegen/statement.rs b/crates/rascal/src/internal/as2_codegen/statement.rs index d5612de..03123c7 100644 --- a/crates/rascal/src/internal/as2_codegen/statement.rs +++ b/crates/rascal/src/internal/as2_codegen/statement.rs @@ -5,7 +5,7 @@ use crate::internal::as2::hir::{ use crate::internal::as2_codegen::access::VariableAccess; use crate::internal::as2_codegen::builder::CodeBuilder; use crate::internal::as2_codegen::context::ScriptContext; -use crate::internal::as2_pcode::{Action, CatchTarget, PCode, PushValue}; +use crate::internal::as2_pcode::{Action, CatchTarget, FunctionParam, PCode, PushValue}; pub(crate) fn gen_statements( context: &mut ScriptContext, @@ -18,12 +18,12 @@ pub(crate) fn gen_statements( if matches!( statement, StatementKind::Expr(Expr { - value: ExprKind::Function(Function { + value: ExprKind::Function(func), + .. + }) if matches!(func.as_ref(), Function { signature: FunctionSignature { name: Some(_), .. }, .. - }), - .. - }) + }) ) { hoisted.push(statement); } else { @@ -44,8 +44,8 @@ pub(crate) fn gen_statement( statement: &StatementKind, ) { match statement { - StatementKind::Declare(declarations) => { - gen_declarations(context, builder, declarations); + StatementKind::Declare(declaration) => { + gen_declaration(context, builder, declaration); } StatementKind::Return(exprs) => { for expr in exprs { @@ -416,20 +416,18 @@ fn gen_ternary( builder.assume_stack_delta(-1); } -fn gen_declarations( +fn gen_declaration( context: &mut ScriptContext, builder: &mut CodeBuilder, - declarations: &[Declaration], + declaration: &Declaration, ) { - for declaration in declarations { - let value = context.constants.add(&declaration.name); - builder.push(value); - if let Some(value) = &declaration.value { - gen_expr(context, builder, value, false); - builder.action(Action::DefineLocal); - } else { - builder.action(Action::DefineLocal2); - } + let value = context.constants.add(&declaration.name); + builder.push(value); + if let Some(value) = &declaration.value { + gen_expr(context, builder, value, false); + builder.action(Action::DefineLocal); + } else { + builder.action(Action::DefineLocal2); } } @@ -800,16 +798,42 @@ pub(crate) fn gen_function( } else { None }; - builder.action(Action::DefineFunction { - name: name.unwrap_or_default(), - params: function - .signature - .args - .iter() - .map(|arg| arg.name.to_string()) - .collect(), - actions, - }); + if function.register_count <= 1 { + builder.action(Action::DefineFunction { + name: name.unwrap_or_default(), + params: function + .signature + .args + .iter() + .map(|arg| arg.name.to_string()) + .collect(), + actions, + }); + } else { + builder.action(Action::DefineFunction2 { + name: name.unwrap_or_default(), + params: function + .signature + .args + .iter() + .map(|arg| FunctionParam { + name: arg.name.to_string(), + register: arg.register.unwrap_or(0), + }) + .collect(), + actions, + register_count: function.register_count, + preload_this: function.preload_this, + suppress_this: function.suppress_this, + preload_arguments: function.preload_arguments, + suppress_arguments: function.suppress_arguments, + preload_super: function.preload_super, + suppress_super: function.suppress_super, + preload_root: function.preload_root, + preload_parent: function.preload_parent, + preload_global: function.preload_global, + }); + } context.set_break_label(old_break); context.set_continue_label(old_continue); } diff --git a/crates/rascal/src/internal/as2_pcode.rs b/crates/rascal/src/internal/as2_pcode.rs index 5f64981..1b89726 100644 --- a/crates/rascal/src/internal/as2_pcode.rs +++ b/crates/rascal/src/internal/as2_pcode.rs @@ -6,6 +6,7 @@ pub use crate::internal::as2_pcode::parser::parse_actions; pub use crate::internal::as2_pcode::pcode::Action; pub use crate::internal::as2_pcode::pcode::Actions; pub use crate::internal::as2_pcode::pcode::CatchTarget; +pub use crate::internal::as2_pcode::pcode::FunctionParam; pub use crate::internal::as2_pcode::pcode::PushValue; mod lexer; diff --git a/crates/rascal/src/internal/as2_pcode/lexer.rs b/crates/rascal/src/internal/as2_pcode/lexer.rs index effabfc..caf46ac 100644 --- a/crates/rascal/src/internal/as2_pcode/lexer.rs +++ b/crates/rascal/src/internal/as2_pcode/lexer.rs @@ -235,6 +235,7 @@ fn lex_identifier_or_action<'a>(stream: &mut Stream<'a>) -> Token<'a> { "constantpool" => TokenKind::ActionName(ActionName::ConstantPool), "decrement" => TokenKind::ActionName(ActionName::Decrement), "definefunction" => TokenKind::ActionName(ActionName::DefineFunction), + "definefunction2" => TokenKind::ActionName(ActionName::DefineFunction2), "definelocal" => TokenKind::ActionName(ActionName::DefineLocal), "definelocal2" => TokenKind::ActionName(ActionName::DefineLocal2), "delete" => TokenKind::ActionName(ActionName::Delete), diff --git a/crates/rascal/src/internal/as2_pcode/lexer/snapshots/rascal__internal__as2_pcode__lexer__tests__all_samples@function.pcode.snap b/crates/rascal/src/internal/as2_pcode/lexer/snapshots/rascal__internal__as2_pcode__lexer__tests__all_samples@function.pcode.snap index 20014b8..addfe3f 100644 --- a/crates/rascal/src/internal/as2_pcode/lexer/snapshots/rascal__internal__as2_pcode__lexer__tests__all_samples@function.pcode.snap +++ b/crates/rascal/src/internal/as2_pcode/lexer/snapshots/rascal__internal__as2_pcode__lexer__tests__all_samples@function.pcode.snap @@ -32,582 +32,731 @@ input_file: samples/as2_pcode/function.pcode - kind: String span: start: 35 - end: 39 - raw: bb + end: 41 + raw: anon - kind: Comma - span: - start: 39 - end: 40 - raw: "," -- kind: String span: start: 41 - end: 45 - raw: aa -- kind: Comma - span: - start: 45 - end: 46 + end: 42 raw: "," - kind: String span: - start: 47 - end: 75 + start: 43 + end: 71 raw: Anonymous function called! - kind: Comma span: - start: 75 - end: 76 + start: 71 + end: 72 raw: "," - kind: String span: - start: 77 - end: 83 + start: 73 + end: 79 raw: "a = " - kind: Comma span: - start: 83 - end: 84 + start: 79 + end: 80 raw: "," - kind: String span: - start: 85 - end: 88 - raw: a + start: 81 + end: 89 + raw: ", b = " - kind: Comma span: - start: 88 - end: 89 + start: 89 + end: 90 raw: "," - kind: String span: - start: 90 - end: 98 - raw: ", b = " + start: 91 + end: 95 + raw: bb - kind: Comma span: - start: 98 - end: 99 + start: 95 + end: 96 raw: "," - kind: String span: - start: 100 - end: 103 - raw: b + start: 97 + end: 101 + raw: aa - kind: Comma span: - start: 103 - end: 104 + start: 101 + end: 102 raw: "," - kind: String span: - start: 105 - end: 111 + start: 103 + end: 109 raw: test - kind: Newline span: - start: 111 - end: 112 + start: 109 + end: 110 raw: "\n" - kind: ActionName: DefineFunction span: - start: 112 - end: 126 + start: 110 + end: 124 raw: DefineFunction - kind: String span: - start: 127 - end: 133 + start: 125 + end: 131 raw: test - kind: Comma span: - start: 133 - end: 134 + start: 131 + end: 132 raw: "," - kind: Integer span: - start: 135 - end: 136 + start: 133 + end: 134 raw: "0" - kind: OpenBrace span: - start: 137 - end: 138 + start: 135 + end: 136 raw: "{" - kind: Newline span: - start: 138 - end: 139 + start: 136 + end: 137 raw: "\n" - kind: ActionName: Push span: - start: 139 - end: 143 + start: 137 + end: 141 raw: Push - kind: Constant: 0 span: - start: 144 - end: 153 + start: 142 + end: 151 raw: constant0 - kind: Newline span: - start: 153 - end: 154 + start: 151 + end: 152 raw: "\n" - kind: ActionName: Trace span: - start: 154 - end: 159 + start: 152 + end: 157 raw: Trace - kind: Newline span: - start: 159 - end: 160 + start: 157 + end: 158 raw: "\n" - kind: ActionName: Push span: - start: 160 - end: 164 + start: 158 + end: 162 raw: Push - kind: Constant: 1 span: - start: 165 - end: 174 + start: 163 + end: 172 raw: constant1 - kind: Newline span: - start: 174 - end: 175 + start: 172 + end: 173 raw: "\n" - kind: ActionName: Return span: - start: 175 - end: 181 + start: 173 + end: 179 raw: Return - kind: Newline span: - start: 181 - end: 182 + start: 179 + end: 180 raw: "\n" - kind: CloseBrace span: - start: 182 - end: 183 + start: 180 + end: 181 raw: "}" - kind: Newline span: - start: 183 - end: 184 + start: 181 + end: 182 raw: "\n" - kind: ActionName: Push span: - start: 184 - end: 188 + start: 182 + end: 186 raw: Push - kind: Constant: 2 span: - start: 189 - end: 198 + start: 187 + end: 196 raw: constant2 - kind: Newline span: - start: 198 - end: 199 + start: 196 + end: 197 raw: "\n" - kind: - ActionName: Push - span: - start: 199 - end: 203 - raw: Push -- kind: - Constant: 3 + ActionName: DefineFunction2 span: - start: 204 - end: 213 - raw: constant3 -- kind: Newline + start: 197 + end: 212 + raw: DefineFunction2 +- kind: String span: start: 213 - end: 214 - raw: "\n" -- kind: - ActionName: Push + end: 215 + raw: "" +- kind: Comma span: - start: 214 - end: 218 - raw: Push + start: 215 + end: 216 + raw: "," - kind: Integer span: - start: 219 - end: 220 + start: 217 + end: 218 raw: "2" -- kind: Newline +- kind: Comma + span: + start: 218 + end: 219 + raw: "," +- kind: Integer span: start: 220 end: 221 - raw: "\n" -- kind: - ActionName: DefineFunction + raw: "3" +- kind: Comma span: start: 221 - end: 235 - raw: DefineFunction -- kind: String + end: 222 + raw: "," +- kind: "False" span: - start: 236 - end: 238 - raw: "" + start: 223 + end: 228 + raw: "false" - kind: Comma span: - start: 238 - end: 239 + start: 228 + end: 229 raw: "," -- kind: Integer +- kind: "False" + span: + start: 230 + end: 235 + raw: "false" +- kind: Comma span: - start: 240 + start: 235 + end: 236 + raw: "," +- kind: "True" + span: + start: 237 end: 241 - raw: "2" + raw: "true" - kind: Comma span: start: 241 end: 242 raw: "," -- kind: String +- kind: "False" span: start: 243 - end: 246 + end: 248 + raw: "false" +- kind: Comma + span: + start: 248 + end: 249 + raw: "," +- kind: "True" + span: + start: 250 + end: 254 + raw: "true" +- kind: Comma + span: + start: 254 + end: 255 + raw: "," +- kind: "False" + span: + start: 256 + end: 261 + raw: "false" +- kind: Comma + span: + start: 261 + end: 262 + raw: "," +- kind: "True" + span: + start: 263 + end: 267 + raw: "true" +- kind: Comma + span: + start: 267 + end: 268 + raw: "," +- kind: "False" + span: + start: 269 + end: 274 + raw: "false" +- kind: Comma + span: + start: 274 + end: 275 + raw: "," +- kind: "False" + span: + start: 276 + end: 281 + raw: "false" +- kind: Comma + span: + start: 281 + end: 282 + raw: "," +- kind: Integer + span: + start: 283 + end: 284 + raw: "2" +- kind: Comma + span: + start: 284 + end: 285 + raw: "," +- kind: String + span: + start: 286 + end: 289 raw: a - kind: Comma span: - start: 247 - end: 248 + start: 289 + end: 290 + raw: "," +- kind: Integer + span: + start: 291 + end: 292 + raw: "1" +- kind: Comma + span: + start: 292 + end: 293 raw: "," - kind: String span: - start: 249 - end: 252 + start: 294 + end: 297 raw: b - kind: OpenBrace span: - start: 254 - end: 255 + start: 298 + end: 299 raw: "{" - kind: Newline span: - start: 255 - end: 256 + start: 299 + end: 300 raw: "\n" - kind: ActionName: Push span: - start: 256 - end: 260 + start: 300 + end: 304 raw: Push - kind: - Constant: 4 + Constant: 3 span: - start: 261 - end: 270 - raw: constant4 + start: 305 + end: 314 + raw: constant3 - kind: Newline span: - start: 270 - end: 271 + start: 314 + end: 315 raw: "\n" - kind: ActionName: Trace span: - start: 271 - end: 276 + start: 315 + end: 320 raw: Trace - kind: Newline span: - start: 276 - end: 277 - raw: "\n" -- kind: - ActionName: Push - span: - start: 277 - end: 281 - raw: Push -- kind: - Constant: 5 - span: - start: 282 - end: 291 - raw: constant5 -- kind: Newline - span: - start: 291 - end: 292 + start: 320 + end: 321 raw: "\n" - kind: ActionName: Push span: - start: 292 - end: 296 + start: 321 + end: 325 raw: Push - kind: - Constant: 6 + Constant: 4 span: - start: 297 - end: 306 - raw: constant6 -- kind: Newline + start: 326 + end: 335 + raw: constant4 +- kind: Comma span: - start: 306 - end: 307 - raw: "\n" + start: 335 + end: 336 + raw: "," - kind: - ActionName: GetVariable + Register: 2 span: - start: 307 - end: 318 - raw: GetVariable + start: 337 + end: 346 + raw: register2 - kind: Newline span: - start: 318 - end: 319 + start: 346 + end: 347 raw: "\n" - kind: ActionName: Add2 span: - start: 319 - end: 323 + start: 347 + end: 351 raw: Add2 - kind: Newline span: - start: 323 - end: 324 + start: 351 + end: 352 raw: "\n" - kind: ActionName: Push span: - start: 324 - end: 328 + start: 352 + end: 356 raw: Push - kind: - Constant: 7 + Constant: 5 span: - start: 329 - end: 338 - raw: constant7 + start: 357 + end: 366 + raw: constant5 - kind: Newline span: - start: 338 - end: 339 + start: 366 + end: 367 raw: "\n" - kind: ActionName: Add2 span: - start: 339 - end: 343 + start: 367 + end: 371 raw: Add2 - kind: Newline span: - start: 343 - end: 344 + start: 371 + end: 372 raw: "\n" - kind: ActionName: Push span: - start: 344 - end: 348 + start: 372 + end: 376 raw: Push - kind: - Constant: 8 + Register: 1 span: - start: 349 - end: 358 - raw: constant8 + start: 377 + end: 386 + raw: register1 - kind: Newline span: - start: 358 - end: 359 - raw: "\n" -- kind: - ActionName: GetVariable - span: - start: 359 - end: 370 - raw: GetVariable -- kind: Newline - span: - start: 370 - end: 371 + start: 386 + end: 387 raw: "\n" - kind: ActionName: Add2 span: - start: 371 - end: 375 + start: 387 + end: 391 raw: Add2 - kind: Newline span: - start: 375 - end: 376 + start: 391 + end: 392 raw: "\n" - kind: ActionName: Trace span: - start: 376 - end: 381 + start: 392 + end: 397 raw: Trace - kind: Newline span: - start: 381 - end: 382 + start: 397 + end: 398 raw: "\n" - kind: CloseBrace span: - start: 382 - end: 383 + start: 398 + end: 399 raw: "}" - kind: Newline span: - start: 383 - end: 384 + start: 399 + end: 400 + raw: "\n" +- kind: + ActionName: DefineLocal + span: + start: 400 + end: 411 + raw: DefineLocal +- kind: Newline + span: + start: 411 + end: 412 + raw: "\n" +- kind: + ActionName: Push + span: + start: 412 + end: 416 + raw: Push +- kind: + Constant: 6 + span: + start: 417 + end: 426 + raw: constant6 +- kind: Comma + span: + start: 426 + end: 427 + raw: "," +- kind: + Constant: 7 + span: + start: 428 + end: 437 + raw: constant7 +- kind: Comma + span: + start: 437 + end: 438 + raw: "," +- kind: Integer + span: + start: 439 + end: 440 + raw: "2" +- kind: Comma + span: + start: 440 + end: 441 + raw: "," +- kind: + Constant: 2 + span: + start: 442 + end: 451 + raw: constant2 +- kind: Newline + span: + start: 451 + end: 452 raw: "\n" - kind: ActionName: CallFunction span: - start: 384 - end: 396 + start: 452 + end: 464 raw: CallFunction - kind: Newline span: - start: 396 - end: 397 + start: 464 + end: 465 raw: "\n" - kind: ActionName: Pop span: - start: 397 - end: 400 + start: 465 + end: 468 raw: Pop - kind: Newline span: - start: 400 - end: 401 + start: 468 + end: 469 raw: "\n" - kind: ActionName: Push span: - start: 401 - end: 405 + start: 469 + end: 473 raw: Push - kind: Integer span: - start: 406 - end: 407 + start: 474 + end: 475 raw: "0" -- kind: Newline - span: - start: 407 - end: 408 - raw: "\n" -- kind: - ActionName: Push +- kind: Comma span: - start: 408 - end: 412 - raw: Push + start: 475 + end: 476 + raw: "," - kind: - Constant: 9 + Constant: 8 span: - start: 413 - end: 422 - raw: constant9 + start: 477 + end: 486 + raw: constant8 - kind: Newline span: - start: 422 - end: 423 + start: 486 + end: 487 raw: "\n" - kind: ActionName: CallFunction span: - start: 423 - end: 435 + start: 487 + end: 499 raw: CallFunction - kind: Newline span: - start: 435 - end: 436 + start: 499 + end: 500 raw: "\n" - kind: ActionName: Push span: - start: 436 - end: 440 + start: 500 + end: 504 raw: Push - kind: Integer span: - start: 441 - end: 442 + start: 505 + end: 506 raw: "0" -- kind: Newline - span: - start: 442 - end: 443 - raw: "\n" -- kind: - ActionName: Push +- kind: Comma span: - start: 443 - end: 447 - raw: Push + start: 506 + end: 507 + raw: "," - kind: - Constant: 9 + Constant: 8 span: - start: 448 - end: 457 - raw: constant9 + start: 508 + end: 517 + raw: constant8 - kind: Newline span: - start: 457 - end: 458 + start: 517 + end: 518 raw: "\n" - kind: ActionName: CallFunction span: - start: 458 - end: 470 + start: 518 + end: 530 raw: CallFunction - kind: Newline span: - start: 470 - end: 471 + start: 530 + end: 531 raw: "\n" - kind: ActionName: Add2 span: - start: 471 - end: 475 + start: 531 + end: 535 raw: Add2 - kind: Newline span: - start: 475 - end: 476 + start: 535 + end: 536 raw: "\n" - kind: ActionName: Trace span: - start: 476 - end: 481 + start: 536 + end: 541 raw: Trace - kind: Newline span: - start: 481 - end: 482 + start: 541 + end: 542 + raw: "\n" +- kind: + ActionName: DefineFunction + span: + start: 542 + end: 556 + raw: DefineFunction +- kind: String + span: + start: 557 + end: 559 + raw: "" +- kind: Comma + span: + start: 559 + end: 560 + raw: "," +- kind: Integer + span: + start: 561 + end: 562 + raw: "0" +- kind: OpenBrace + span: + start: 563 + end: 564 + raw: "{" +- kind: Newline + span: + start: 564 + end: 565 + raw: "\n" +- kind: CloseBrace + span: + start: 565 + end: 566 + raw: "}" +- kind: Newline + span: + start: 566 + end: 567 + raw: "\n" +- kind: + ActionName: Pop + span: + start: 567 + end: 570 + raw: Pop +- kind: Newline + span: + start: 570 + end: 571 raw: "\n" diff --git a/crates/rascal/src/internal/as2_pcode/lexer/tokens.rs b/crates/rascal/src/internal/as2_pcode/lexer/tokens.rs index 6649918..3d8d793 100644 --- a/crates/rascal/src/internal/as2_pcode/lexer/tokens.rs +++ b/crates/rascal/src/internal/as2_pcode/lexer/tokens.rs @@ -105,6 +105,7 @@ pub enum ActionName { ConstantPool, Decrement, DefineFunction, + DefineFunction2, DefineLocal, DefineLocal2, Delete, diff --git a/crates/rascal/src/internal/as2_pcode/parser/actions.rs b/crates/rascal/src/internal/as2_pcode/parser/actions.rs index a9cb6b3..a8b6fc4 100644 --- a/crates/rascal/src/internal/as2_pcode/parser/actions.rs +++ b/crates/rascal/src/internal/as2_pcode/parser/actions.rs @@ -1,3 +1,4 @@ +use crate::internal::as2_pcode::FunctionParam; use crate::internal::as2_pcode::lexer::tokens::{ActionName, Token, TokenKind}; use crate::internal::as2_pcode::parser::Tokens; use crate::internal::as2_pcode::pcode::{Action, Actions, CatchTarget, PushValue}; @@ -67,6 +68,7 @@ pub(crate) fn action(i: &mut Tokens<'_>) -> ModalResult { ActionName::ConstantPool => constant_pool.parse_next(i)?, ActionName::Decrement => Action::Decrement, ActionName::DefineFunction => define_function.parse_next(i)?, + ActionName::DefineFunction2 => define_function_2.parse_next(i)?, ActionName::DefineLocal => Action::DefineLocal, ActionName::DefineLocal2 => Action::DefineLocal2, ActionName::Delete => Action::Delete, @@ -263,6 +265,64 @@ pub fn define_function(i: &mut Tokens<'_>) -> ModalResult { }) } +pub fn define_function_2(i: &mut Tokens<'_>) -> ModalResult { + let name = string.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let num_args = integer.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let register_count = u8.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let preload_parent = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let preload_root = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let suppress_super = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let preload_super = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let suppress_arguments = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let preload_arguments = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let suppress_this = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let preload_this = bool.parse_next(i)?; + TokenKind::Comma.parse_next(i)?; + let preload_global = bool.parse_next(i)?; + let args = if num_args > 0 { + TokenKind::Comma.parse_next(i)?; + separated( + num_args as usize, + (u8, TokenKind::Comma, string).map(|(i, _, s)| FunctionParam { + register: i, + name: s, + }), + TokenKind::Comma, + ) + .parse_next(i)? + } else { + vec![] + }; + TokenKind::OpenBrace.parse_next(i)?; + let body = actions(true).parse_next(i)?; + TokenKind::CloseBrace.parse_next(i)?; + Ok(Action::DefineFunction2 { + name, + params: args, + actions: body, + register_count, + preload_this, + suppress_this, + preload_arguments, + suppress_arguments, + preload_super, + suppress_super, + preload_root, + preload_parent, + preload_global, + }) +} + pub fn with(i: &mut Tokens<'_>) -> ModalResult { TokenKind::OpenBrace.parse_next(i)?; let body = actions(true).parse_next(i)?; @@ -418,6 +478,7 @@ pub(crate) fn push_value(i: &mut Tokens<'_>) -> ModalResult { #[cfg(test)] mod tests { + use crate::internal::as2_pcode::FunctionParam; use crate::internal::as2_pcode::lexer::tokens::{ActionName, TokenKind}; use crate::internal::as2_pcode::parser::parse_actions; use crate::internal::as2_pcode::parser::tests::build_tokens; @@ -697,6 +758,90 @@ mod tests { ) } + #[test] + fn test_define_function_2() { + let tokens = build_tokens(&[ + ( + TokenKind::ActionName(ActionName::DefineFunction2), + "DefineFunction2", + ), + (TokenKind::String, "foo"), + (TokenKind::Comma, ","), + (TokenKind::Integer, "2"), + (TokenKind::Comma, ","), + (TokenKind::Integer, "4"), + (TokenKind::Comma, ","), + (TokenKind::False, "false"), + (TokenKind::Comma, ","), + (TokenKind::False, "false"), + (TokenKind::Comma, ","), + (TokenKind::True, "true"), + (TokenKind::Comma, ","), + (TokenKind::False, "false"), + (TokenKind::Comma, ","), + (TokenKind::True, "true"), + (TokenKind::Comma, ","), + (TokenKind::False, "false"), + (TokenKind::Comma, ","), + (TokenKind::True, "true"), + (TokenKind::Comma, ","), + (TokenKind::False, "false"), + (TokenKind::Comma, ","), + (TokenKind::False, "false"), + (TokenKind::Comma, ","), + (TokenKind::Integer, "1"), + (TokenKind::Comma, ","), + (TokenKind::String, "a"), + (TokenKind::Comma, ","), + (TokenKind::Integer, "2"), + (TokenKind::Comma, ","), + (TokenKind::String, "b"), + (TokenKind::OpenBrace, "{"), + (TokenKind::ActionName(ActionName::Push), "push"), + (TokenKind::String, "a"), + (TokenKind::Newline, "\n"), + (TokenKind::ActionName(ActionName::Trace), "trace"), + (TokenKind::Newline, "\n"), + (TokenKind::CloseBrace, "}"), + ]); + assert_eq!( + parse_actions(&tokens), + Ok(Actions { + actions: vec![Action::DefineFunction2 { + name: "foo".to_string(), + params: vec![ + FunctionParam { + register: 1, + name: "a".to_string() + }, + FunctionParam { + register: 2, + name: "b".to_string() + } + ], + actions: Actions { + actions: vec![ + Action::Push(vec![PushValue::String("a".to_owned())]), + Action::Trace + ], + label_positions: Default::default() + }, + register_count: 4, + preload_this: false, + suppress_this: true, + preload_arguments: false, + suppress_arguments: true, + preload_super: false, + suppress_super: true, + preload_root: false, + preload_parent: false, + preload_global: false, + }], + label_positions: Default::default() + }) + ) + } + #[test] fn test_get_url() { let tokens = build_tokens(&[ diff --git a/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__all_samples@function.pcode.snap b/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__all_samples@function.pcode.snap index 06eba26..cf99846 100644 --- a/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__all_samples@function.pcode.snap +++ b/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__all_samples@function.pcode.snap @@ -8,13 +8,12 @@ Ok: - ConstantPool: - Test called! - ":)" - - bb - - aa + - anon - Anonymous function called! - "a = " - - a - ", b = " - - b + - bb + - aa - test - DefineFunction: name: test @@ -30,47 +29,63 @@ Ok: label_positions: {} - Push: - Constant: 2 - - Push: - - Constant: 3 - - Push: - - Integer: 2 - - DefineFunction: + - DefineFunction2: name: "" params: - - a - - b + - name: a + register: 2 + - name: b + register: 1 actions: actions: - Push: - - Constant: 4 + - Constant: 3 - Trace - Push: - - Constant: 5 - - Push: - - Constant: 6 - - GetVariable + - Constant: 4 + - Register: 2 - Add2 - Push: - - Constant: 7 + - Constant: 5 - Add2 - Push: - - Constant: 8 - - GetVariable + - Register: 1 - Add2 - Trace label_positions: {} + register_count: 3 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - DefineLocal + - Push: + - Constant: 6 + - Constant: 7 + - Integer: 2 + - Constant: 2 - CallFunction - Pop - Push: - Integer: 0 - - Push: - - Constant: 9 + - Constant: 8 - CallFunction - Push: - Integer: 0 - - Push: - - Constant: 9 + - Constant: 8 - CallFunction - Add2 - Trace + - DefineFunction: + name: "" + params: [] + actions: + actions: [] + label_positions: {} + - Pop label_positions: {} diff --git a/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__printed@function.pcode.snap b/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__printed@function.pcode.snap index 4665d69..a2e6969 100644 --- a/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__printed@function.pcode.snap +++ b/crates/rascal/src/internal/as2_pcode/parser/snapshots/rascal__internal__as2_pcode__parser__tests__printed@function.pcode.snap @@ -3,7 +3,7 @@ source: crates/rascal/src/internal/as2_pcode/parser/tests.rs expression: "parsed.unwrap_or_else(|_| Actions::empty())" input_file: samples/as2_pcode/function.pcode --- -ConstantPool "Test called!", ":)", "bb", "aa", "Anonymous function called!", "a = ", "a", ", b = ", "b", "test" +ConstantPool "Test called!", ":)", "anon", "Anonymous function called!", "a = ", ", b = ", "bb", "aa", "test" DefineFunction "test", 0 { Push constant0 Trace @@ -11,29 +11,27 @@ Push constant1 Return } Push constant2 +DefineFunction2 "", 2, 3, false, false, true, false, true, false, true, false, false, 2, "a", 1, "b" { Push constant3 -Push 2 -DefineFunction "", 2, "a", "b" { -Push constant4 Trace -Push constant5 -Push constant6 -GetVariable +Push constant4, register2 Add2 -Push constant7 +Push constant5 Add2 -Push constant8 -GetVariable +Push register1 Add2 Trace } +DefineLocal +Push constant6, constant7, 2, constant2 CallFunction Pop -Push 0 -Push constant9 +Push 0, constant8 CallFunction -Push 0 -Push constant9 +Push 0, constant8 CallFunction Add2 Trace +DefineFunction "", 0 { +} +Pop diff --git a/crates/rascal/src/internal/as2_pcode/pcode.rs b/crates/rascal/src/internal/as2_pcode/pcode.rs index fda6f23..deb1645 100644 --- a/crates/rascal/src/internal/as2_pcode/pcode.rs +++ b/crates/rascal/src/internal/as2_pcode/pcode.rs @@ -77,6 +77,12 @@ impl std::fmt::Display for Actions { } } +#[derive(Debug, PartialEq, Serialize, Clone)] +pub struct FunctionParam { + pub name: String, + pub register: u8, +} + #[derive(Debug, PartialEq, Serialize, Clone)] pub enum Action { Add, @@ -102,6 +108,21 @@ pub enum Action { params: Vec, actions: Actions, }, + DefineFunction2 { + name: String, + params: Vec, + actions: Actions, + register_count: u8, + preload_this: bool, + suppress_this: bool, + preload_arguments: bool, + suppress_arguments: bool, + preload_super: bool, + suppress_super: bool, + preload_root: bool, + preload_parent: bool, + preload_global: bool, + }, DefineLocal, DefineLocal2, Delete, @@ -235,6 +256,13 @@ impl Action { 0 } } + Action::DefineFunction2 { name, .. } => { + if name.is_empty() { + 1 + } else { + 0 + } + } Action::DefineLocal => -2, Action::DefineLocal2 => -1, Action::Delete => -2, @@ -365,6 +393,33 @@ impl std::fmt::Display for Action { write!(f, "{}", actions)?; write!(f, "}}") } + Action::DefineFunction2 { + name, + params, + actions, + register_count, + preload_this, + suppress_this, + preload_arguments, + suppress_arguments, + preload_super, + suppress_super, + preload_root, + preload_parent, + preload_global, + } => { + let num_params = params.len(); + write!( + f, + "DefineFunction2 \"{name}\", {num_params}, {register_count}, {preload_parent}, {preload_root}, {suppress_super}, {preload_super}, {suppress_arguments}, {preload_arguments}, {suppress_this}, {preload_this}, {preload_global}", + )?; + for param in params { + write!(f, ", {}, \"{}\"", param.register, param.name)?; + } + writeln!(f, " {{")?; + write!(f, "{}", actions)?; + write!(f, "}}") + } Action::DefineLocal => write!(f, "DefineLocal"), Action::DefineLocal2 => write!(f, "DefineLocal2"), Action::Delete => write!(f, "Delete"), diff --git a/crates/rascal/src/program.rs b/crates/rascal/src/program.rs index a3fb8be..095c2fe 100644 --- a/crates/rascal/src/program.rs +++ b/crates/rascal/src/program.rs @@ -1,4 +1,7 @@ use crate::error::{Error, ErrorSet}; +use crate::internal::as2::hir::optimizer::optimize_variables_to_registers; +use crate::internal::as2::hir::scope::Scope; +use crate::internal::as2::hir::simplifier::simplify; use crate::internal::as2::lexer::Lexer; use crate::internal::as2::resolver::resolve_hir; use crate::internal::as2::{hir, parser, type_path_to_file_path}; @@ -155,6 +158,7 @@ impl ProgramBuilder

{ } pub fn build(self) -> Result { + let mut root_scope = Scope::default(); let mut initial_script = vec![]; let mut interfaces = vec![]; let mut classes = vec![]; @@ -197,9 +201,10 @@ impl ProgramBuilder

{ pending_classes.push(name); } } - while hir.simplify() { + while simplify(&mut hir) { // Keep going until nothing changed } + optimize_variables_to_registers(&mut hir); Some(hir) } @@ -236,8 +241,13 @@ impl ProgramBuilder

{ &path, "", true, - ) && let hir::Document::Script(statements) = document + ) && let hir::Document::Script { statements, scope } = document { + root_scope.defined_variables.extend(scope.defined_variables); + root_scope + .referenced_variables + .extend(scope.referenced_variables); + root_scope.could_reference_anything |= scope.could_reference_anything; initial_script.extend(statements); } } @@ -326,7 +336,7 @@ fn call_main_method(class: &str) -> hir::StatementKind { name: Box::new(name), args: vec![hir::Expr::new( Span::default(), - hir::ExprKind::Constant(hir::ConstantKind::This), + hir::ExprKind::Constant(hir::ConstantKind::Identifier("this".to_owned())), )], }, )) @@ -402,7 +412,7 @@ mod tests { )), args: vec![hir::Expr::new( Span::default(), - hir::ExprKind::Constant(hir::ConstantKind::This) + hir::ExprKind::Constant(hir::ConstantKind::Identifier("this".to_owned())) )] } )) @@ -457,7 +467,7 @@ mod tests { )), args: vec![hir::Expr::new( Span::default(), - hir::ExprKind::Constant(hir::ConstantKind::This) + hir::ExprKind::Constant(hir::ConstantKind::Identifier("this".to_owned())) )] } )) diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@ClassMembersTest.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@ClassMembersTest.as.snap index e187c3d..2153a16 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@ClassMembersTest.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@ClassMembersTest.as.snap @@ -49,6 +49,38 @@ Ok: value: Constant: String: test! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false greet: function: @@ -65,6 +97,7 @@ Ok: start: 649 end: 655 value: String + register: ~ return_type: span: start: 658 @@ -132,6 +165,42 @@ Ok: Constant: String: shoutStatically args: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + name: + used: true + used_in_inner_scope: false + referenced_variables: + - ClassMembersTest + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false shoutStatically: function: @@ -167,6 +236,39 @@ Ok: value: Constant: String: scream + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - ClassMembersTest + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: true maybeABitmapData: function: @@ -190,6 +292,39 @@ Ok: value: Constant: Identifier: "null" + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - "null" + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false secret: function: @@ -202,6 +337,38 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false notASecret: function: @@ -214,6 +381,38 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false __get__virtualProperty: function: @@ -233,6 +432,38 @@ Ok: value: Constant: String: virtual! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false __get__onlyGetter: function: @@ -252,6 +483,38 @@ Ok: value: Constant: String: getter + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false __set__onlySetter: function: @@ -264,6 +527,7 @@ Ok: args: - name: value type_name: ~ + register: ~ return_type: ~ body: - Expr: @@ -315,6 +579,41 @@ Ok: Constant: String: __get__onlySetter args: [] + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + value: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false __set__virtualProperty: function: @@ -327,6 +626,7 @@ Ok: args: - name: value type_name: ~ + register: ~ return_type: ~ body: - Expr: @@ -378,6 +678,41 @@ Ok: Constant: String: __get__virtualProperty args: [] + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + value: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false __get__virtualPropertyProbablyStatic: function: @@ -397,6 +732,38 @@ Ok: value: Constant: String: Static! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: true __set__virtualPropertyProbablyStatic: function: @@ -409,6 +776,7 @@ Ok: args: - name: value type_name: ~ + register: ~ return_type: ~ body: - Expr: @@ -460,6 +828,41 @@ Ok: Constant: String: __get__virtualPropertyProbablyStatic args: [] + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + value: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false __set__virtualPropertyProbablyNotStatic: function: @@ -472,6 +875,7 @@ Ok: args: - name: value type_name: ~ + register: ~ return_type: ~ body: - Expr: @@ -523,6 +927,41 @@ Ok: Constant: String: __get__virtualPropertyProbablyNotStatic args: [] + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + value: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false __get__virtualPropertyProbablyNotStatic: function: @@ -542,6 +981,38 @@ Ok: value: Constant: String: Static! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: true virtual_properties: virtualProperty: @@ -618,6 +1089,7 @@ Ok: start: 359 end: 365 value: String + register: ~ return_type: ~ body: - Expr: @@ -636,7 +1108,8 @@ Ok: start: 377 end: 382 value: - Constant: This + Constant: + Identifier: this - span: start: 377 end: 382 @@ -665,7 +1138,8 @@ Ok: start: 407 end: 417 value: - Constant: This + Constant: + Identifier: this - span: start: 407 end: 417 @@ -699,7 +1173,8 @@ Ok: start: 468 end: 495 value: - Constant: This + Constant: + Identifier: this - span: start: 468 end: 495 @@ -792,7 +1267,8 @@ Ok: start: 556 end: 571 value: - Constant: This + Constant: + Identifier: this - span: start: 556 end: 571 @@ -820,13 +1296,50 @@ Ok: start: 599 end: 614 value: - Constant: This + Constant: + Identifier: this - span: start: 599 end: 614 value: Constant: String: virtualProperty + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + name: + used: false + used_in_inner_scope: false + referenced_variables: + - path + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false - name: path.to.ANestedClass extends: path.to.ANestedBaseClass implements: @@ -883,6 +1396,39 @@ Ok: Constant: String: ANestedClass args: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - path + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: true success: function: @@ -940,6 +1486,39 @@ Ok: value: Constant: String: message + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - path + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false virtual_properties: {} fields: @@ -963,6 +1542,20 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: {} + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false - name: path.to.ANestedBaseClass extends: ~ implements: [] @@ -979,4 +1572,18 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: {} + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@DynamicClass.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@DynamicClass.as.snap index c4b49d6..358ba3c 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@DynamicClass.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@DynamicClass.as.snap @@ -23,4 +23,18 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: {} + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@EmptyClass.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@EmptyClass.as.snap index 3055d34..b278352 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@EmptyClass.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@EmptyClass.as.snap @@ -23,4 +23,18 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: {} + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@MtascStyle.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@MtascStyle.as.snap index 990284e..fc2267f 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@MtascStyle.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@MtascStyle.as.snap @@ -34,7 +34,8 @@ Ok: start: 0 end: 0 value: - Constant: This + Constant: + Identifier: this interfaces: [] classes: - name: MtascStyle @@ -64,6 +65,38 @@ Ok: value: Constant: String: Main method! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: true virtual_properties: {} fields: {} @@ -77,4 +110,18 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: {} + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@NotMtascStyle.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@NotMtascStyle.as.snap index 61448d1..2cc1aa8 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@NotMtascStyle.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@NotMtascStyle.as.snap @@ -34,6 +34,38 @@ Ok: value: Constant: String: Not actually the main method! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false is_static: false virtual_properties: {} fields: {} @@ -47,4 +79,18 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: {} + referenced_variables: [] + could_reference_anything: false + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_and_trace.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_and_trace.as.snap index 2455313..664fd06 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_and_trace.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_and_trace.as.snap @@ -6,19 +6,19 @@ input_file: samples/as2/assign_variable_and_trace.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 11 - value: message + name: + span: + start: 4 + end: 11 + value: message + value: + span: + start: 14 + end: 27 value: - span: - start: 14 - end: 27 - value: - Constant: - String: Hello World - type_name: ~ + Constant: + String: Hello World + type_name: ~ - Expr: span: start: 29 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_many_ways.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_many_ways.as.snap index c02785d..168a31e 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_many_ways.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@assign_variable_many_ways.as.snap @@ -6,31 +6,31 @@ input_file: samples/as2/assign_variable_many_ways.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 11 - value: message + name: + span: + start: 4 + end: 11 + value: message + value: + span: + start: 14 + end: 27 value: - span: - start: 14 - end: 27 - value: - BinaryOperator: - - Add - - span: - start: 14 - end: 21 - value: - Constant: - String: Hello - - span: - start: 24 - end: 27 - value: - Constant: - String: " " - type_name: ~ + BinaryOperator: + - Add + - span: + start: 14 + end: 21 + value: + Constant: + String: Hello + - span: + start: 24 + end: 27 + value: + Constant: + String: " " + type_name: ~ - Expr: span: start: 29 @@ -93,40 +93,43 @@ Ok: value: Constant: Identifier: message - - Declare: - - name: - span: - start: 95 - end: 96 - value: a - value: - span: - start: 97 - end: 98 + - Block: + - Declare: + name: + span: + start: 95 + end: 96 + value: a value: - Constant: - Integer: 1 - type_name: ~ - - name: - span: - start: 100 - end: 101 - value: b - value: ~ - type_name: ~ - - name: - span: - start: 103 - end: 104 - value: c - value: - span: - start: 105 - end: 106 + span: + start: 97 + end: 98 + value: + Constant: + Integer: 1 + type_name: ~ + - Declare: + name: + span: + start: 100 + end: 101 + value: b + value: ~ + type_name: ~ + - Declare: + name: + span: + start: 103 + end: 104 + value: c value: - Constant: - Integer: 3 - type_name: ~ + span: + start: 105 + end: 106 + value: + Constant: + Integer: 3 + type_name: ~ - Expr: span: start: 108 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@block.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@block.as.snap index a7d652c..ceeb60c 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@block.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@block.as.snap @@ -6,34 +6,34 @@ input_file: samples/as2/block.as Ok: initial_script: - Declare: - - name: - span: - start: 97 - end: 104 - value: outside + name: + span: + start: 97 + end: 104 + value: outside + value: + span: + start: 107 + end: 116 value: - span: - start: 107 - end: 116 - value: - Constant: - String: visible - type_name: ~ + Constant: + String: visible + type_name: ~ - Block: - Declare: - - name: - span: - start: 128 - end: 134 - value: inside + name: + span: + start: 128 + end: 134 + value: inside + value: + span: + start: 137 + end: 146 value: - span: - start: 137 - end: 146 - value: - Constant: - String: visible - type_name: ~ + Constant: + String: visible + type_name: ~ - Expr: span: start: 152 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@comments.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@comments.as.snap index 202608b..ad0e24b 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@comments.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@comments.as.snap @@ -6,61 +6,61 @@ input_file: samples/as2/comments.as Ok: initial_script: - Declare: - - name: - span: - start: 112 - end: 113 - value: a + name: + span: + start: 112 + end: 113 + value: a + value: + span: + start: 116 + end: 119 value: - span: - start: 116 - end: 119 - value: - Constant: - String: "1" - type_name: ~ + Constant: + String: "1" + type_name: ~ - Declare: - - name: - span: - start: 244 - end: 245 - value: b + name: + span: + start: 244 + end: 245 + value: b + value: + span: + start: 248 + end: 251 value: - span: - start: 248 - end: 251 - value: - Constant: - String: "2" - type_name: ~ + Constant: + String: "2" + type_name: ~ - Declare: - - name: - span: - start: 311 - end: 312 - value: c + name: + span: + start: 311 + end: 312 + value: c + value: + span: + start: 371 + end: 374 value: - span: - start: 371 - end: 374 - value: - Constant: - String: "3" - type_name: ~ + Constant: + String: "3" + type_name: ~ - Declare: - - name: - span: - start: 447 - end: 448 - value: d + name: + span: + start: 447 + end: 448 + value: d + value: + span: + start: 451 + end: 454 value: - span: - start: 451 - end: 454 - value: - Constant: - String: "4" - type_name: ~ + Constant: + String: "4" + type_name: ~ - Expr: span: start: 506 @@ -88,103 +88,103 @@ Ok: Constant: Identifier: b - Declare: - - name: - span: - start: 652 - end: 653 - value: e + name: + span: + start: 652 + end: 653 + value: e + value: + span: + start: 656 + end: 659 value: - span: - start: 656 - end: 659 - value: - Constant: - String: "5" - type_name: ~ + Constant: + String: "5" + type_name: ~ - Declare: - - name: - span: - start: 666 - end: 667 - value: f + name: + span: + start: 666 + end: 667 + value: f + value: + span: + start: 670 + end: 688 value: - span: - start: 670 - end: 688 - value: - Constant: - String: // not a comment - type_name: ~ + Constant: + String: // not a comment + type_name: ~ - Declare: - - name: - span: - start: 723 - end: 724 - value: g + name: + span: + start: 723 + end: 724 + value: g + value: + span: + start: 727 + end: 748 value: - span: - start: 727 - end: 748 - value: - Constant: - String: /* not a comment */ - type_name: ~ + Constant: + String: /* not a comment */ + type_name: ~ - Declare: - - name: - span: - start: 789 - end: 790 - value: h + name: + span: + start: 789 + end: 790 + value: h + value: + span: + start: 793 + end: 824 value: - span: - start: 793 - end: 824 - value: - Constant: - String: "\"/* still not a comment */\"" - type_name: ~ + Constant: + String: "\"/* still not a comment */\"" + type_name: ~ - Declare: - - name: - span: - start: 894 - end: 895 - value: i + name: + span: + start: 894 + end: 895 + value: i + value: + span: + start: 898 + end: 901 value: - span: - start: 898 - end: 901 - value: - Constant: - String: "6" - type_name: ~ + Constant: + String: "6" + type_name: ~ - Declare: - - name: - span: - start: 1038 - end: 1039 - value: j + name: + span: + start: 1038 + end: 1039 + value: j + value: + span: + start: 1042 + end: 1045 value: - span: - start: 1042 - end: 1045 - value: - Constant: - String: "7" - type_name: ~ + Constant: + String: "7" + type_name: ~ - Declare: - - name: - span: - start: 1111 - end: 1112 - value: k + name: + span: + start: 1111 + end: 1112 + value: k + value: + span: + start: 1115 + end: 1118 value: - span: - start: 1115 - end: 1118 - value: - Constant: - String: "8" - type_name: ~ + Constant: + String: "8" + type_name: ~ interfaces: [] classes: [] custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@delete.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@delete.as.snap index b15ae3d..7cdf420 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@delete.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@delete.as.snap @@ -6,39 +6,39 @@ input_file: samples/as2/delete.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 7 - value: num + name: + span: + start: 4 + end: 7 + value: num + value: + span: + start: 10 + end: 11 value: - span: - start: 10 - end: 11 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Declare: - - name: - span: - start: 17 - end: 20 - value: obj + name: + span: + start: 17 + end: 20 + value: obj + value: + span: + start: 23 + end: 31 value: - span: - start: 23 - end: 31 - value: - InitObject: - - - num - - span: - start: 29 - end: 30 - value: - Constant: - Integer: 1 - type_name: ~ + InitObject: + - - num + - span: + start: 29 + end: 30 + value: + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 33 @@ -98,25 +98,25 @@ Ok: Constant: Identifier: obj - Declare: - - name: - span: - start: 129 - end: 132 - value: obj + name: + span: + start: 129 + end: 132 + value: obj + value: + span: + start: 135 + end: 143 value: - span: - start: 135 - end: 143 - value: - InitObject: - - - num - - span: - start: 141 - end: 142 - value: - Constant: - Integer: 1 - type_name: ~ + InitObject: + - - num + - span: + start: 141 + end: 142 + value: + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 145 @@ -158,25 +158,25 @@ Ok: Constant: String: num - Declare: - - name: - span: - start: 203 - end: 206 - value: obj + name: + span: + start: 203 + end: 206 + value: obj + value: + span: + start: 209 + end: 217 value: - span: - start: 209 - end: 217 - value: - InitObject: - - - num - - span: - start: 215 - end: 216 - value: - Constant: - Integer: 1 - type_name: ~ + InitObject: + - - num + - span: + start: 215 + end: 216 + value: + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 219 @@ -230,25 +230,25 @@ Ok: Constant: Integer: 1 - Declare: - - name: - span: - start: 282 - end: 285 - value: obj + name: + span: + start: 282 + end: 285 + value: obj + value: + span: + start: 288 + end: 296 value: - span: - start: 288 - end: 296 - value: - InitObject: - - - num - - span: - start: 294 - end: 295 - value: - Constant: - Integer: 1 - type_name: ~ + InitObject: + - - num + - span: + start: 294 + end: 295 + value: + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 298 @@ -310,25 +310,25 @@ Ok: Constant: String: ":(" - Declare: - - name: - span: - start: 400 - end: 403 - value: obj + name: + span: + start: 400 + end: 403 + value: obj + value: + span: + start: 406 + end: 414 value: - span: - start: 406 - end: 414 - value: - InitObject: - - - num - - span: - start: 412 - end: 413 - value: - Constant: - Integer: 1 - type_name: ~ + InitObject: + - - num + - span: + start: 412 + end: 413 + value: + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 416 @@ -398,32 +398,32 @@ Ok: Constant: String: num - Declare: - - name: - span: - start: 505 - end: 508 - value: obj + name: + span: + start: 505 + end: 508 + value: obj + value: + span: + start: 511 + end: 533 value: - span: - start: 511 - end: 533 - value: - InitObject: - - - num - - span: - start: 517 - end: 518 - value: - Constant: - Integer: 1 - - - trace - - span: - start: 527 - end: 532 - value: - Constant: - Identifier: trace - type_name: ~ + InitObject: + - - num + - span: + start: 517 + end: 518 + value: + Constant: + Integer: 1 + - - trace + - span: + start: 527 + end: 532 + value: + Constant: + Identifier: trace + type_name: ~ - Expr: span: start: 535 @@ -465,32 +465,32 @@ Ok: Constant: String: trace - Declare: - - name: - span: - start: 597 - end: 600 - value: obj + name: + span: + start: 597 + end: 600 + value: obj + value: + span: + start: 603 + end: 625 value: - span: - start: 603 - end: 625 - value: - InitObject: - - - num - - span: - start: 609 - end: 610 - value: - Constant: - Integer: 1 - - - trace - - span: - start: 619 - end: 624 - value: - Constant: - Identifier: trace - type_name: ~ + InitObject: + - - num + - span: + start: 609 + end: 610 + value: + Constant: + Integer: 1 + - - trace + - span: + start: 619 + end: 624 + value: + Constant: + Identifier: trace + type_name: ~ - Expr: span: start: 627 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@for_loop.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@for_loop.as.snap index d5c3847..80c3689 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@for_loop.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@for_loop.as.snap @@ -22,19 +22,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 31 - end: 32 - value: i + name: + span: + start: 31 + end: 32 + value: i + value: + span: + start: 35 + end: 36 value: - span: - start: 35 - end: 36 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 38 @@ -94,19 +94,19 @@ Ok: Constant: String: for_no_init - Declare: - - name: - span: - start: 160 - end: 161 - value: j + name: + span: + start: 160 + end: 161 + value: j + value: + span: + start: 164 + end: 165 value: - span: - start: 164 - end: 165 - value: - Constant: - Integer: 3 - type_name: ~ + Constant: + Integer: 3 + type_name: ~ - Expr: span: start: 167 @@ -198,19 +198,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 336 - end: 337 - value: k + name: + span: + start: 336 + end: 337 + value: k + value: + span: + start: 340 + end: 341 value: - span: - start: 340 - end: 341 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: [] update: - span: @@ -280,19 +280,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 506 - end: 507 - value: n + name: + span: + start: 506 + end: 507 + value: n + value: + span: + start: 510 + end: 511 value: - span: - start: 510 - end: 511 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 513 @@ -353,19 +353,19 @@ Ok: Constant: String: for_all_omitted - Declare: - - name: - span: - start: 645 - end: 650 - value: count + name: + span: + start: 645 + end: 650 + value: count + value: + span: + start: 653 + end: 654 value: - span: - start: 653 - end: 654 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ - ForIn: condition: Classic: @@ -448,18 +448,18 @@ Ok: Constant: String: for_in_object - Declare: - - name: - span: - start: 853 - end: 856 - value: obj + name: + span: + start: 853 + end: 856 + value: obj + value: + span: + start: 859 + end: 861 value: - span: - start: 859 - end: 861 - value: - InitObject: [] - type_name: ~ + InitObject: [] + type_name: ~ - Expr: span: start: 866 @@ -594,44 +594,44 @@ Ok: Constant: String: for_in_array - Declare: - - name: - span: - start: 1038 - end: 1041 - value: arr + name: + span: + start: 1038 + end: 1041 + value: arr + value: + span: + start: 1044 + end: 1053 value: - span: - start: 1044 - end: 1053 - value: - InitArray: - - span: - start: 1045 - end: 1046 - value: - Constant: - Integer: 5 - - span: - start: 1048 - end: 1049 - value: - Constant: - Integer: 6 - - span: - start: 1051 - end: 1052 - value: - Constant: - Integer: 7 - type_name: ~ + InitArray: + - span: + start: 1045 + end: 1046 + value: + Constant: + Integer: 5 + - span: + start: 1048 + end: 1049 + value: + Constant: + Integer: 6 + - span: + start: 1051 + end: 1052 + value: + Constant: + Integer: 7 + type_name: ~ - Declare: - - name: - span: - start: 1059 - end: 1062 - value: idx - value: ~ - type_name: ~ + name: + span: + start: 1059 + end: 1062 + value: idx + value: ~ + type_name: ~ - ForIn: condition: Enumerate: @@ -709,33 +709,35 @@ Ok: condition: Classic: initialize: - Declare: - - name: - span: - start: 1224 - end: 1225 - value: a - value: - span: - start: 1228 - end: 1229 + Block: + - Declare: + name: + span: + start: 1224 + end: 1225 + value: a value: - Constant: - Integer: 0 - type_name: ~ - - name: - span: - start: 1231 - end: 1232 - value: b - value: - span: - start: 1235 - end: 1236 + span: + start: 1228 + end: 1229 + value: + Constant: + Integer: 0 + type_name: ~ + - Declare: + name: + span: + start: 1231 + end: 1232 + value: b value: - Constant: - Integer: 3 - type_name: ~ + span: + start: 1235 + end: 1236 + value: + Constant: + Integer: 3 + type_name: ~ condition: - span: start: 1238 @@ -835,19 +837,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 1387 - end: 1388 - value: x + name: + span: + start: 1387 + end: 1388 + value: x + value: + span: + start: 1391 + end: 1392 value: - span: - start: 1391 - end: 1392 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 1394 @@ -971,19 +973,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 1606 - end: 1611 - value: outer + name: + span: + start: 1606 + end: 1611 + value: outer + value: + span: + start: 1614 + end: 1615 value: - span: - start: 1614 - end: 1615 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 1617 @@ -1023,19 +1025,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 1652 - end: 1657 - value: inner + name: + span: + start: 1652 + end: 1657 + value: inner + value: + span: + start: 1660 + end: 1661 value: - span: - start: 1660 - end: 1661 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 1663 @@ -1119,13 +1121,13 @@ Ok: Constant: String: for_existing_var - Declare: - - name: - span: - start: 1826 - end: 1827 - value: z - value: ~ - type_name: ~ + name: + span: + start: 1826 + end: 1827 + value: z + value: ~ + type_name: ~ - ForIn: condition: Classic: @@ -1212,19 +1214,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 1983 - end: 1984 - value: q + name: + span: + start: 1983 + end: 1984 + value: q + value: + span: + start: 1987 + end: 1988 value: - span: - start: 1987 - end: 1988 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 1990 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function.as.snap index 7643c61..439c998 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function.as.snap @@ -39,88 +39,160 @@ Ok: value: Constant: String: ":)" + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Declare: - - name: - span: - start: 69 - end: 73 - value: anon + name: + span: + start: 69 + end: 73 + value: anon + value: + span: + start: 76 + end: 172 value: - span: - start: 76 - end: 172 - value: - Function: - signature: - name: ~ - args: - - name: a - type_name: ~ - - name: b - type_name: ~ - return_type: ~ - body: - - Expr: - span: - start: 96 - end: 131 - value: - Trace: - span: - start: 102 - end: 130 - value: - Constant: - String: Anonymous function called! - - Expr: - span: - start: 137 - end: 169 - value: - Trace: - span: - start: 143 - end: 168 - value: - BinaryOperator: - - Add - - span: - start: 143 - end: 164 - value: - BinaryOperator: - - Add - - span: - start: 143 - end: 153 - value: - BinaryOperator: - - Add - - span: - start: 143 - end: 149 - value: - Constant: - String: "a = " - - span: - start: 152 - end: 153 - value: - Constant: - Identifier: a - - span: - start: 156 - end: 164 - value: - Constant: - String: ", b = " - - span: - start: 167 - end: 168 - value: - Constant: - Identifier: b - type_name: ~ + Function: + signature: + name: ~ + args: + - name: a + type_name: ~ + register: 1 + - name: b + type_name: ~ + register: 2 + return_type: ~ + body: + - Expr: + span: + start: 96 + end: 131 + value: + Trace: + span: + start: 102 + end: 130 + value: + Constant: + String: Anonymous function called! + - Expr: + span: + start: 137 + end: 169 + value: + Trace: + span: + start: 143 + end: 168 + value: + BinaryOperator: + - Add + - span: + start: 143 + end: 164 + value: + BinaryOperator: + - Add + - span: + start: 143 + end: 153 + value: + BinaryOperator: + - Add + - span: + start: 143 + end: 149 + value: + Constant: + String: "a = " + - span: + start: 152 + end: 153 + value: + Constant: + Register: 1 + - span: + start: 156 + end: 164 + value: + Constant: + String: ", b = " + - span: + start: 167 + end: 168 + value: + Constant: + Register: 2 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 3 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + type_name: ~ - Expr: span: start: 174 @@ -196,6 +268,38 @@ Ok: args: [] return_type: ~ body: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false interfaces: [] classes: [] custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_hoisting.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_hoisting.as.snap index 2982bfb..87c5f05 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_hoisting.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_hoisting.as.snap @@ -6,19 +6,19 @@ input_file: samples/as2/function_hoisting.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 12 - value: firstVar + name: + span: + start: 4 + end: 12 + value: firstVar + value: + span: + start: 15 + end: 16 value: - span: - start: 15 - end: 16 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 18 @@ -163,20 +163,87 @@ Ok: value: Constant: String: function within a function! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - functionWithinAFunction + - firstVar + - secondVar + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Declare: - - name: - span: - start: 288 - end: 297 - value: secondVar + name: + span: + start: 288 + end: 297 + value: secondVar + value: + span: + start: 300 + end: 301 value: - span: - start: 300 - end: 301 - value: - Constant: - Integer: 2 - type_name: ~ + Constant: + Integer: 2 + type_name: ~ - Expr: span: start: 303 @@ -280,6 +347,40 @@ Ok: value: Constant: Identifier: secondVar + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - firstVar + - secondVar + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 461 @@ -383,6 +484,40 @@ Ok: value: Constant: Identifier: secondVar + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - firstVar + - secondVar + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 636 @@ -452,6 +587,38 @@ Ok: value: Constant: String: third function! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 754 @@ -493,6 +660,38 @@ Ok: value: Constant: String: Unused function! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false interfaces: [] classes: [] custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_in_loop_break_continue.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_in_loop_break_continue.as.snap index 22e08f4..1ae8677 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_in_loop_break_continue.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@function_in_loop_break_continue.as.snap @@ -10,19 +10,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 9 - end: 10 - value: i + name: + span: + start: 9 + end: 10 + value: i + value: + span: + start: 13 + end: 14 value: - span: - start: 13 - end: 14 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 16 @@ -82,111 +82,179 @@ Ok: Constant: Identifier: i - Declare: - - name: - span: - start: 114 - end: 120 - value: decide + name: + span: + start: 114 + end: 120 + value: decide + value: + span: + start: 123 + end: 288 value: - span: - start: 123 - end: 288 - value: - Function: - signature: - name: ~ - args: - - name: v - type_name: ~ - return_type: ~ - body: - - If: - condition: - span: - start: 149 - end: 155 - value: - BinaryOperator: - - Equal - - span: - start: 149 - end: 150 - value: - Constant: - Identifier: v - - span: - start: 154 - end: 155 - value: - Constant: - Integer: 1 - "yes": - Block: - - Return: - - span: - start: 178 - end: 188 - value: - Constant: - String: continue - "no": ~ - - If: - condition: - span: - start: 212 - end: 218 - value: - BinaryOperator: - - Equal + Function: + signature: + name: ~ + args: + - name: v + type_name: ~ + register: 1 + return_type: ~ + body: + - If: + condition: + span: + start: 149 + end: 155 + value: + BinaryOperator: + - Equal + - span: + start: 149 + end: 150 + value: + Constant: + Register: 1 + - span: + start: 154 + end: 155 + value: + Constant: + Integer: 1 + "yes": + Block: + - Return: - span: - start: 212 - end: 213 + start: 178 + end: 188 value: Constant: - Identifier: v + String: continue + "no": ~ + - If: + condition: + span: + start: 212 + end: 218 + value: + BinaryOperator: + - Equal + - span: + start: 212 + end: 213 + value: + Constant: + Register: 1 + - span: + start: 217 + end: 218 + value: + Constant: + Integer: 3 + "yes": + Block: + - Return: - span: - start: 217 - end: 218 + start: 241 + end: 248 value: Constant: - Integer: 3 - "yes": - Block: - - Return: - - span: - start: 241 - end: 248 - value: - Constant: - String: break - "no": ~ - - Return: - - span: - start: 275 - end: 281 - value: - Constant: - String: none - type_name: ~ + String: break + "no": ~ + - Return: + - span: + start: 275 + end: 281 + value: + Constant: + String: none + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + v: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + type_name: ~ - Declare: - - name: - span: - start: 371 - end: 378 - value: naughty + name: + span: + start: 371 + end: 378 + value: naughty + value: + span: + start: 381 + end: 414 value: - span: - start: 381 - end: 414 - value: - Function: - signature: - name: ~ - args: [] - return_type: ~ - body: - - Break - type_name: ~ + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Break + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + type_name: ~ - Expr: span: start: 420 @@ -202,32 +270,32 @@ Ok: Identifier: naughty args: [] - Declare: - - name: - span: - start: 440 - end: 446 - value: action + name: + span: + start: 440 + end: 446 + value: action + value: + span: + start: 449 + end: 458 value: - span: - start: 449 - end: 458 - value: - Call: - name: - span: - start: 449 - end: 455 + Call: + name: + span: + start: 449 + end: 455 + value: + Constant: + Identifier: decide + args: + - span: + start: 456 + end: 457 value: Constant: - Identifier: decide - args: - - span: - start: 456 - end: 457 - value: - Constant: - Identifier: i - type_name: ~ + Identifier: i + type_name: ~ - If: condition: span: diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@if_else.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@if_else.as.snap index 2c9ab56..589e204 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@if_else.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@if_else.as.snap @@ -6,53 +6,53 @@ input_file: samples/as2/if_else.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 13 - value: condition + name: + span: + start: 4 + end: 13 + value: condition + value: + span: + start: 16 + end: 20 value: - span: - start: 16 - end: 20 - value: - Constant: - Boolean: true - type_name: ~ + Constant: + Boolean: true + type_name: ~ - Declare: - - name: - span: - start: 26 - end: 27 - value: x + name: + span: + start: 26 + end: 27 + value: x + value: + span: + start: 30 + end: 31 value: - span: - start: 30 - end: 31 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Declare: - - name: - span: - start: 37 - end: 38 - value: y + name: + span: + start: 37 + end: 38 + value: y + value: + span: + start: 41 + end: 43 value: - span: - start: 41 - end: 43 - value: - UnaryOperator: - - Sub - - span: - start: 42 - end: 43 - value: - Constant: - Integer: 1 - type_name: ~ + UnaryOperator: + - Sub + - span: + start: 42 + end: 43 + value: + Constant: + Integer: 1 + type_name: ~ - If: condition: span: diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@import_affects_functions.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@import_affects_functions.as.snap index 0eaeedd..864df99 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@import_affects_functions.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@import_affects_functions.as.snap @@ -32,6 +32,39 @@ Ok: value: Constant: Identifier: BitmapData + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - BitmapData + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Block: [] - Expr: span: @@ -82,6 +115,39 @@ Ok: value: Constant: String: BitmapData + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - flash + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 128 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@inline_pcode.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@inline_pcode.as.snap index 5102f2e..076ef8a 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@inline_pcode.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@inline_pcode.as.snap @@ -20,6 +20,7 @@ Ok: args: - name: message type_name: ~ + register: ~ return_type: ~ body: - Expr: @@ -47,6 +48,41 @@ Ok: value: Constant: String: "-- end special message --" + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + message: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 209 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@legacy_get_set.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@legacy_get_set.as.snap index 4cfeb28..ea30d33 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@legacy_get_set.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@legacy_get_set.as.snap @@ -6,33 +6,33 @@ input_file: samples/as2/legacy_get_set.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 5 - value: y + name: + span: + start: 4 + end: 5 + value: y + value: + span: + start: 8 + end: 9 value: - span: - start: 8 - end: 9 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Declare: - - name: - span: - start: 15 - end: 16 - value: x + name: + span: + start: 15 + end: 16 + value: x + value: + span: + start: 19 + end: 22 value: - span: - start: 19 - end: 22 - value: - Constant: - String: y - type_name: ~ + Constant: + String: y + type_name: ~ - Expr: span: start: 24 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_break_continue.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_break_continue.as.snap index 4a622ce..c7b4972 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_break_continue.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_break_continue.as.snap @@ -10,19 +10,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 9 - end: 10 - value: i + name: + span: + start: 9 + end: 10 + value: i + value: + span: + start: 13 + end: 14 value: - span: - start: 13 - end: 14 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 16 @@ -86,19 +86,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 60 - end: 61 - value: j + name: + span: + start: 60 + end: 61 + value: j + value: + span: + start: 64 + end: 65 value: - span: - start: 64 - end: 65 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 67 @@ -134,36 +134,68 @@ Ok: body: Block: - Declare: - - name: - span: - start: 87 - end: 89 - value: fn + name: + span: + start: 87 + end: 89 + value: fn + value: + span: + start: 92 + end: 155 value: - span: - start: 92 - end: 155 - value: - Function: - signature: - name: ~ - args: [] - return_type: ~ - body: - - Expr: - span: - start: 108 - end: 140 - value: - Trace: - span: - start: 114 - end: 139 - value: - Constant: - String: trying to break from fn - - Break - type_name: ~ + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 108 + end: 140 + value: + Trace: + span: + start: 114 + end: 139 + value: + Constant: + String: trying to break from fn + - Break + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + type_name: ~ - Expr: span: start: 158 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_for_break_continue.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_for_break_continue.as.snap index 309ee09..dcee66e 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_for_break_continue.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@nested_for_break_continue.as.snap @@ -10,19 +10,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 9 - end: 10 - value: i + name: + span: + start: 9 + end: 10 + value: i + value: + span: + start: 13 + end: 14 value: - span: - start: 13 - end: 14 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 16 @@ -86,19 +86,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 71 - end: 72 - value: j + name: + span: + start: 71 + end: 72 + value: j + value: + span: + start: 75 + end: 76 value: - span: - start: 75 - end: 76 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 78 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@numbers.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@numbers.as.snap index d167e07..bff444d 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@numbers.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@numbers.as.snap @@ -6,497 +6,497 @@ input_file: samples/as2/numbers.as Ok: initial_script: - Declare: - - name: - span: - start: 24 - end: 26 - value: i0 + name: + span: + start: 24 + end: 26 + value: i0 + value: + span: + start: 29 + end: 30 value: - span: - start: 29 - end: 30 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ - Declare: - - name: - span: - start: 36 - end: 38 - value: i1 + name: + span: + start: 36 + end: 38 + value: i1 + value: + span: + start: 41 + end: 42 value: - span: - start: 41 - end: 42 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Declare: - - name: - span: - start: 48 - end: 51 - value: i42 + name: + span: + start: 48 + end: 51 + value: i42 + value: + span: + start: 54 + end: 56 value: - span: - start: 54 - end: 56 - value: - Constant: - Integer: 42 - type_name: ~ + Constant: + Integer: 42 + type_name: ~ - Declare: - - name: - span: - start: 62 - end: 68 - value: iLarge + name: + span: + start: 62 + end: 68 + value: iLarge + value: + span: + start: 71 + end: 81 value: - span: - start: 71 - end: 81 - value: - Constant: - Integer: 2147483647 - type_name: ~ + Constant: + Integer: 2147483647 + type_name: ~ - Declare: - - name: - span: - start: 98 - end: 111 - value: iLargePlusOne + name: + span: + start: 98 + end: 111 + value: iLargePlusOne + value: + span: + start: 114 + end: 124 value: - span: - start: 114 - end: 124 - value: - Constant: - Float: 2147483648 - type_name: ~ + Constant: + Float: 2147483648 + type_name: ~ - Declare: - - name: - span: - start: 175 - end: 177 - value: f0 + name: + span: + start: 175 + end: 177 + value: f0 + value: + span: + start: 180 + end: 183 value: - span: - start: 180 - end: 183 - value: - Constant: - Float: 0 - type_name: ~ + Constant: + Float: 0 + type_name: ~ - Declare: - - name: - span: - start: 189 - end: 191 - value: f1 + name: + span: + start: 189 + end: 191 + value: f1 + value: + span: + start: 194 + end: 198 value: - span: - start: 194 - end: 198 - value: - Constant: - Float: 1.23 - type_name: ~ + Constant: + Float: 1.23 + type_name: ~ - Declare: - - name: - span: - start: 204 - end: 215 - value: fLeadingDot + name: + span: + start: 204 + end: 215 + value: fLeadingDot + value: + span: + start: 218 + end: 220 value: - span: - start: 218 - end: 220 - value: - Constant: - Float: 0.5 - type_name: ~ + Constant: + Float: 0.5 + type_name: ~ - Declare: - - name: - span: - start: 242 - end: 254 - value: fTrailingDot + name: + span: + start: 242 + end: 254 + value: fTrailingDot + value: + span: + start: 257 + end: 259 value: - span: - start: 257 - end: 259 - value: - Constant: - Float: 5 - type_name: ~ + Constant: + Float: 5 + type_name: ~ - Declare: - - name: - span: - start: 328 - end: 330 - value: h0 + name: + span: + start: 328 + end: 330 + value: h0 + value: + span: + start: 333 + end: 336 value: - span: - start: 333 - end: 336 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ - Declare: - - name: - span: - start: 342 - end: 346 - value: hMix + name: + span: + start: 342 + end: 346 + value: hMix + value: + span: + start: 349 + end: 355 value: - span: - start: 349 - end: 355 - value: - Constant: - Integer: 6699 - type_name: ~ + Constant: + Integer: 6699 + type_name: ~ - Declare: - - name: - span: - start: 361 - end: 369 - value: hMaxByte + name: + span: + start: 361 + end: 369 + value: hMaxByte + value: + span: + start: 372 + end: 376 value: - span: - start: 372 - end: 376 - value: - Constant: - Integer: 255 - type_name: ~ + Constant: + Integer: 255 + type_name: ~ - Declare: - - name: - span: - start: 404 - end: 408 - value: eBig + name: + span: + start: 404 + end: 408 + value: eBig + value: + span: + start: 411 + end: 415 value: - span: - start: 411 - end: 415 - value: - Constant: - Float: 10000000000 - type_name: ~ + Constant: + Float: 10000000000 + type_name: ~ - Declare: - - name: - span: - start: 421 - end: 427 - value: eSmall + name: + span: + start: 421 + end: 427 + value: eSmall + value: + span: + start: 430 + end: 435 value: - span: - start: 430 - end: 435 - value: - Constant: - Float: 0.0000000001 - type_name: ~ + Constant: + Float: 0.0000000001 + type_name: ~ - Declare: - - name: - span: - start: 441 - end: 446 - value: ePlus + name: + span: + start: 441 + end: 446 + value: ePlus + value: + span: + start: 449 + end: 455 value: - span: - start: 449 - end: 455 - value: - Constant: - Float: 2500 - type_name: ~ + Constant: + Float: 2500 + type_name: ~ - Declare: - - name: - span: - start: 461 - end: 472 - value: eLeadingDot + name: + span: + start: 461 + end: 472 + value: eLeadingDot + value: + span: + start: 475 + end: 479 value: - span: - start: 475 - end: 479 - value: - Constant: - Float: 50 - type_name: ~ + Constant: + Float: 50 + type_name: ~ - Declare: - - name: - span: - start: 485 - end: 497 - value: eTrailingDot + name: + span: + start: 485 + end: 497 + value: eTrailingDot + value: + span: + start: 500 + end: 504 value: - span: - start: 500 - end: 504 - value: - Constant: - Float: 5000 - type_name: ~ + Constant: + Float: 5000 + type_name: ~ - Declare: - - name: - span: - start: 510 - end: 514 - value: eSci + name: + span: + start: 510 + end: 514 + value: eSci + value: + span: + start: 517 + end: 525 value: - span: - start: 517 - end: 525 - value: - Constant: - Float: 602200000000000000000000 - type_name: ~ + Constant: + Float: 602200000000000000000000 + type_name: ~ - Declare: - - name: - span: - start: 570 - end: 574 - value: nDec + name: + span: + start: 570 + end: 574 + value: nDec + value: + span: + start: 577 + end: 581 value: - span: - start: 577 - end: 581 - value: - UnaryOperator: - - Sub - - span: - start: 578 - end: 581 - value: - Constant: - Integer: 123 - type_name: ~ + UnaryOperator: + - Sub + - span: + start: 578 + end: 581 + value: + Constant: + Integer: 123 + type_name: ~ - Declare: - - name: - span: - start: 587 - end: 591 - value: nHex + name: + span: + start: 587 + end: 591 + value: nHex + value: + span: + start: 594 + end: 599 value: - span: - start: 594 - end: 599 - value: - UnaryOperator: - - Sub - - span: - start: 595 - end: 599 - value: - Constant: - Integer: 255 - type_name: ~ + UnaryOperator: + - Sub + - span: + start: 595 + end: 599 + value: + Constant: + Integer: 255 + type_name: ~ - Declare: - - name: - span: - start: 605 - end: 611 - value: nFloat + name: + span: + start: 605 + end: 611 + value: nFloat + value: + span: + start: 614 + end: 619 value: - span: - start: 614 - end: 619 - value: - UnaryOperator: - - Sub - - span: - start: 615 - end: 619 - value: - Constant: - Float: 3.14 - type_name: ~ + UnaryOperator: + - Sub + - span: + start: 615 + end: 619 + value: + Constant: + Float: 3.14 + type_name: ~ - Declare: - - name: - span: - start: 625 - end: 629 - value: pDec + name: + span: + start: 625 + end: 629 + value: pDec + value: + span: + start: 633 + end: 634 value: - span: - start: 633 - end: 634 - value: - Constant: - Integer: 7 - type_name: ~ + Constant: + Integer: 7 + type_name: ~ - Declare: - - name: - span: - start: 684 - end: 687 - value: sum + name: + span: + start: 684 + end: 687 + value: sum + value: + span: + start: 690 + end: 699 value: - span: - start: 690 - end: 699 - value: - BinaryOperator: - - Add - - span: - start: 690 - end: 695 - value: - BinaryOperator: - - Add - - span: - start: 690 - end: 691 - value: - Constant: - Integer: 1 - - span: - start: 694 - end: 695 - value: - Constant: - Integer: 2 - - span: - start: 698 - end: 699 - value: - Constant: - Integer: 3 - type_name: ~ + BinaryOperator: + - Add + - span: + start: 690 + end: 695 + value: + BinaryOperator: + - Add + - span: + start: 690 + end: 691 + value: + Constant: + Integer: 1 + - span: + start: 694 + end: 695 + value: + Constant: + Integer: 2 + - span: + start: 698 + end: 699 + value: + Constant: + Integer: 3 + type_name: ~ - Declare: - - name: - span: - start: 705 - end: 709 - value: diff + name: + span: + start: 705 + end: 709 + value: diff + value: + span: + start: 712 + end: 718 value: - span: - start: 712 - end: 718 - value: - BinaryOperator: - - Sub - - span: - start: 712 - end: 714 - value: - Constant: - Integer: 10 - - span: - start: 717 - end: 718 - value: - Constant: - Integer: 4 - type_name: ~ + BinaryOperator: + - Sub + - span: + start: 712 + end: 714 + value: + Constant: + Integer: 10 + - span: + start: 717 + end: 718 + value: + Constant: + Integer: 4 + type_name: ~ - Declare: - - name: - span: - start: 724 - end: 728 - value: prod + name: + span: + start: 724 + end: 728 + value: prod + value: + span: + start: 731 + end: 736 value: - span: - start: 731 - end: 736 - value: - BinaryOperator: - - Multiply - - span: - start: 731 - end: 732 - value: - Constant: - Integer: 6 - - span: - start: 735 - end: 736 - value: - Constant: - Integer: 7 - type_name: ~ + BinaryOperator: + - Multiply + - span: + start: 731 + end: 732 + value: + Constant: + Integer: 6 + - span: + start: 735 + end: 736 + value: + Constant: + Integer: 7 + type_name: ~ - Declare: - - name: - span: - start: 742 - end: 746 - value: quot + name: + span: + start: 742 + end: 746 + value: quot + value: + span: + start: 749 + end: 755 value: - span: - start: 749 - end: 755 - value: - BinaryOperator: - - Divide - - span: - start: 749 - end: 751 - value: - Constant: - Integer: 22 - - span: - start: 754 - end: 755 - value: - Constant: - Integer: 7 - type_name: ~ + BinaryOperator: + - Divide + - span: + start: 749 + end: 751 + value: + Constant: + Integer: 22 + - span: + start: 754 + end: 755 + value: + Constant: + Integer: 7 + type_name: ~ - Declare: - - name: - span: - start: 761 - end: 766 - value: combo + name: + span: + start: 761 + end: 766 + value: combo + value: + span: + start: 769 + end: 794 value: - span: - start: 769 - end: 794 - value: - BinaryOperator: - - Sub - - span: - start: 769 - end: 788 - value: - BinaryOperator: - - Multiply - - span: - start: 770 - end: 779 - value: - BinaryOperator: - - Add - - span: - start: 770 - end: 774 - value: - Constant: - Integer: 16 - - span: - start: 777 - end: 779 - value: - Constant: - Integer: 15 - - span: - start: 783 - end: 788 - value: - Constant: - Float: 25 - - span: - start: 791 - end: 794 - value: - Constant: - Float: 0.75 - type_name: ~ + BinaryOperator: + - Sub + - span: + start: 769 + end: 788 + value: + BinaryOperator: + - Multiply + - span: + start: 770 + end: 779 + value: + BinaryOperator: + - Add + - span: + start: 770 + end: 774 + value: + Constant: + Integer: 16 + - span: + start: 777 + end: 779 + value: + Constant: + Integer: 15 + - span: + start: 783 + end: 788 + value: + Constant: + Float: 25 + - span: + start: 791 + end: 794 + value: + Constant: + Float: 0.75 + type_name: ~ - Expr: span: start: 797 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@objects.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@objects.as.snap index 7835a13..37f7a74 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@objects.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@objects.as.snap @@ -6,32 +6,32 @@ input_file: samples/as2/objects.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 5 - value: o + name: + span: + start: 4 + end: 5 + value: o + value: + span: + start: 8 + end: 25 value: - span: - start: 8 - end: 25 - value: - InitObject: - - - a - - span: - start: 12 - end: 13 - value: - Constant: - Integer: 1 - - - b - - span: - start: 18 - end: 24 - value: - Constant: - Identifier: Object - type_name: ~ + InitObject: + - - a + - span: + start: 12 + end: 13 + value: + Constant: + Integer: 1 + - - b + - span: + start: 18 + end: 24 + value: + Constant: + Identifier: Object + type_name: ~ - Expr: span: start: 27 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__add_sub.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__add_sub.as.snap index 81df335..47314ba 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__add_sub.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__add_sub.as.snap @@ -6,47 +6,47 @@ input_file: samples/as2/op_precedence/add_sub.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 5 - value: a + name: + span: + start: 4 + end: 5 + value: a + value: + span: + start: 8 + end: 10 value: - span: - start: 8 - end: 10 - value: - Constant: - Integer: 10 - type_name: ~ + Constant: + Integer: 10 + type_name: ~ - Declare: - - name: - span: - start: 16 - end: 17 - value: b + name: + span: + start: 16 + end: 17 + value: b + value: + span: + start: 20 + end: 21 value: - span: - start: 20 - end: 21 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Declare: - - name: - span: - start: 27 - end: 28 - value: c + name: + span: + start: 27 + end: 28 + value: c + value: + span: + start: 31 + end: 32 value: - span: - start: 31 - end: 32 - value: - Constant: - Integer: 2 - type_name: ~ + Constant: + Integer: 2 + type_name: ~ - Expr: span: start: 35 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_math.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_math.as.snap index d3ceb88..3afa4e0 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_math.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_math.as.snap @@ -6,47 +6,47 @@ input_file: samples/as2/op_precedence/bit_math.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 5 - value: a + name: + span: + start: 4 + end: 5 + value: a + value: + span: + start: 8 + end: 10 value: - span: - start: 8 - end: 10 - value: - Constant: - Integer: 12 - type_name: ~ + Constant: + Integer: 12 + type_name: ~ - Declare: - - name: - span: - start: 27 - end: 28 - value: b + name: + span: + start: 27 + end: 28 + value: b + value: + span: + start: 31 + end: 32 value: - span: - start: 31 - end: 32 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Declare: - - name: - span: - start: 50 - end: 51 - value: c + name: + span: + start: 50 + end: 51 + value: c + value: + span: + start: 54 + end: 55 value: - span: - start: 54 - end: 55 - value: - Constant: - Integer: 3 - type_name: ~ + Constant: + Integer: 3 + type_name: ~ - Expr: span: start: 70 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_shifts.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_shifts.as.snap index a62a714..9f4f7ef 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_shifts.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__bit_shifts.as.snap @@ -6,47 +6,47 @@ input_file: samples/as2/op_precedence/bit_shifts.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 5 - value: a + name: + span: + start: 4 + end: 5 + value: a + value: + span: + start: 8 + end: 10 value: - span: - start: 8 - end: 10 - value: - Constant: - Integer: 16 - type_name: ~ + Constant: + Integer: 16 + type_name: ~ - Declare: - - name: - span: - start: 32 - end: 33 - value: b + name: + span: + start: 32 + end: 33 + value: b + value: + span: + start: 36 + end: 37 value: - span: - start: 36 - end: 37 - value: - Constant: - Integer: 2 - type_name: ~ + Constant: + Integer: 2 + type_name: ~ - Declare: - - name: - span: - start: 43 - end: 44 - value: c + name: + span: + start: 43 + end: 44 + value: c + value: + span: + start: 47 + end: 48 value: - span: - start: 47 - end: 48 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 51 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__comparison.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__comparison.as.snap index a9b95b2..a39a044 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__comparison.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__comparison.as.snap @@ -6,47 +6,47 @@ input_file: samples/as2/op_precedence/comparison.as Ok: initial_script: - Declare: - - name: - span: - start: 17 - end: 18 - value: a + name: + span: + start: 17 + end: 18 + value: a + value: + span: + start: 21 + end: 23 value: - span: - start: 21 - end: 23 - value: - Constant: - Integer: 10 - type_name: ~ + Constant: + Integer: 10 + type_name: ~ - Declare: - - name: - span: - start: 29 - end: 30 - value: b + name: + span: + start: 29 + end: 30 + value: b + value: + span: + start: 33 + end: 34 value: - span: - start: 33 - end: 34 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Declare: - - name: - span: - start: 40 - end: 41 - value: c + name: + span: + start: 40 + end: 41 + value: c + value: + span: + start: 44 + end: 45 value: - span: - start: 44 - end: 45 - value: - Constant: - Integer: 7 - type_name: ~ + Constant: + Integer: 7 + type_name: ~ - Expr: span: start: 48 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__equality.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__equality.as.snap index 4432481..2d5fafd 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__equality.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__equality.as.snap @@ -6,47 +6,47 @@ input_file: samples/as2/op_precedence/equality.as Ok: initial_script: - Declare: - - name: - span: - start: 17 - end: 18 - value: a + name: + span: + start: 17 + end: 18 + value: a + value: + span: + start: 21 + end: 23 value: - span: - start: 21 - end: 23 - value: - Constant: - Integer: 10 - type_name: ~ + Constant: + Integer: 10 + type_name: ~ - Declare: - - name: - span: - start: 29 - end: 30 - value: b + name: + span: + start: 29 + end: 30 + value: b + value: + span: + start: 33 + end: 37 value: - span: - start: 33 - end: 37 - value: - Constant: - String: "10" - type_name: ~ + Constant: + String: "10" + type_name: ~ - Declare: - - name: - span: - start: 43 - end: 44 - value: c + name: + span: + start: 43 + end: 44 + value: c + value: + span: + start: 47 + end: 48 value: - span: - start: 47 - end: 48 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Expr: span: start: 51 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__general.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__general.as.snap index b633d35..ed69ca3 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__general.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__general.as.snap @@ -6,183 +6,183 @@ input_file: samples/as2/op_precedence/general.as Ok: initial_script: - Declare: - - name: - span: - start: 83 - end: 86 - value: one + name: + span: + start: 83 + end: 86 + value: one + value: + span: + start: 89 + end: 90 value: - span: - start: 89 - end: 90 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Declare: - - name: - span: - start: 96 - end: 99 - value: two + name: + span: + start: 96 + end: 99 + value: two + value: + span: + start: 102 + end: 103 value: - span: - start: 102 - end: 103 - value: - Constant: - Integer: 2 - type_name: ~ + Constant: + Integer: 2 + type_name: ~ - Declare: - - name: - span: - start: 109 - end: 114 - value: three + name: + span: + start: 109 + end: 114 + value: three + value: + span: + start: 117 + end: 118 value: - span: - start: 117 - end: 118 - value: - Constant: - Integer: 3 - type_name: ~ + Constant: + Integer: 3 + type_name: ~ - Declare: - - name: - span: - start: 124 - end: 128 - value: four + name: + span: + start: 124 + end: 128 + value: four + value: + span: + start: 131 + end: 132 value: - span: - start: 131 - end: 132 - value: - Constant: - Integer: 4 - type_name: ~ + Constant: + Integer: 4 + type_name: ~ - Declare: - - name: - span: - start: 138 - end: 142 - value: five + name: + span: + start: 138 + end: 142 + value: five + value: + span: + start: 145 + end: 146 value: - span: - start: 145 - end: 146 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Declare: - - name: - span: - start: 152 - end: 155 - value: ten + name: + span: + start: 152 + end: 155 + value: ten + value: + span: + start: 158 + end: 160 value: - span: - start: 158 - end: 160 - value: - Constant: - Integer: 10 - type_name: ~ + Constant: + Integer: 10 + type_name: ~ - Declare: - - name: - span: - start: 166 - end: 170 - value: zero + name: + span: + start: 166 + end: 170 + value: zero + value: + span: + start: 173 + end: 174 value: - span: - start: 173 - end: 174 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ - Declare: - - name: - span: - start: 180 - end: 186 - value: negOne + name: + span: + start: 180 + end: 186 + value: negOne + value: + span: + start: 189 + end: 191 value: - span: - start: 189 - end: 191 - value: - UnaryOperator: - - Sub - - span: - start: 190 - end: 191 - value: - Constant: - Integer: 1 - type_name: ~ + UnaryOperator: + - Sub + - span: + start: 190 + end: 191 + value: + Constant: + Integer: 1 + type_name: ~ - Declare: - - name: - span: - start: 197 - end: 198 - value: a - value: ~ - type_name: ~ + name: + span: + start: 197 + end: 198 + value: a + value: ~ + type_name: ~ - Declare: - - name: - span: - start: 204 - end: 205 - value: b - value: ~ - type_name: ~ + name: + span: + start: 204 + end: 205 + value: b + value: ~ + type_name: ~ - Declare: - - name: - span: - start: 211 - end: 212 - value: c - value: ~ - type_name: ~ + name: + span: + start: 211 + end: 212 + value: c + value: ~ + type_name: ~ - Declare: - - name: - span: - start: 218 - end: 219 - value: p - value: ~ - type_name: ~ + name: + span: + start: 218 + end: 219 + value: p + value: ~ + type_name: ~ - Declare: - - name: - span: - start: 225 - end: 226 - value: s + name: + span: + start: 225 + end: 226 + value: s + value: + span: + start: 229 + end: 232 value: - span: - start: 229 - end: 232 - value: - Constant: - String: s - type_name: ~ + Constant: + String: s + type_name: ~ - Declare: - - name: - span: - start: 238 - end: 239 - value: t + name: + span: + start: 238 + end: 239 + value: t + value: + span: + start: 242 + end: 245 value: - span: - start: 242 - end: 245 - value: - Constant: - String: t - type_name: ~ + Constant: + String: t + type_name: ~ - Expr: span: start: 292 @@ -1939,26 +1939,26 @@ Ok: Constant: Identifier: a - Declare: - - name: - span: - start: 4248 - end: 4251 - value: obj + name: + span: + start: 4248 + end: 4251 + value: obj + value: + span: + start: 4254 + end: 4257 value: - span: - start: 4254 - end: 4257 - value: - New: - name: - span: - start: 4258 - end: 4264 - value: - Constant: - Identifier: Object - args: [] - type_name: ~ + New: + name: + span: + start: 4258 + end: 4264 + value: + Constant: + Identifier: Object + args: [] + type_name: ~ - Expr: span: start: 4271 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__inc_dec.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__inc_dec.as.snap index 38b740f..49ff767 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__inc_dec.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__inc_dec.as.snap @@ -6,51 +6,87 @@ input_file: samples/as2/op_precedence/inc_dec.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 5 - value: a + name: + span: + start: 4 + end: 5 + value: a + value: + span: + start: 8 + end: 10 value: - span: - start: 8 - end: 10 - value: - Constant: - Integer: 10 - type_name: ~ + Constant: + Integer: 10 + type_name: ~ - Declare: - - name: - span: - start: 126 - end: 129 - value: trc + name: + span: + start: 126 + end: 129 + value: trc + value: + span: + start: 132 + end: 165 value: - span: - start: 132 - end: 165 - value: - Function: - signature: - name: ~ - args: - - name: msg - type_name: ~ - return_type: ~ - body: - - Expr: - span: - start: 152 - end: 162 - value: - Trace: - span: - start: 158 - end: 161 - value: - Constant: - Identifier: msg - type_name: ~ + Function: + signature: + name: ~ + args: + - name: msg + type_name: ~ + register: 1 + return_type: ~ + body: + - Expr: + span: + start: 152 + end: 162 + value: + Trace: + span: + start: 158 + end: 161 + value: + Constant: + Register: 1 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + msg: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + type_name: ~ - Expr: span: start: 167 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__logic.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__logic.as.snap index 01df4dc..688bab9 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__logic.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__logic.as.snap @@ -6,47 +6,47 @@ input_file: samples/as2/op_precedence/logic.as Ok: initial_script: - Declare: - - name: - span: - start: 17 - end: 18 - value: a + name: + span: + start: 17 + end: 18 + value: a + value: + span: + start: 21 + end: 25 value: - span: - start: 21 - end: 25 - value: - Constant: - Boolean: true - type_name: ~ + Constant: + Boolean: true + type_name: ~ - Declare: - - name: - span: - start: 31 - end: 32 - value: b + name: + span: + start: 31 + end: 32 + value: b + value: + span: + start: 35 + end: 40 value: - span: - start: 35 - end: 40 - value: - Constant: - Boolean: false - type_name: ~ + Constant: + Boolean: false + type_name: ~ - Declare: - - name: - span: - start: 46 - end: 47 - value: c + name: + span: + start: 46 + end: 47 + value: c + value: + span: + start: 50 + end: 54 value: - span: - start: 50 - end: 54 - value: - Constant: - Boolean: true - type_name: ~ + Constant: + Boolean: true + type_name: ~ - Expr: span: start: 57 @@ -624,47 +624,47 @@ Ok: Constant: String: "---" - Declare: - - name: - span: - start: 825 - end: 826 - value: x + name: + span: + start: 825 + end: 826 + value: x + value: + span: + start: 829 + end: 834 value: - span: - start: 829 - end: 834 - value: - Constant: - Boolean: false - type_name: ~ + Constant: + Boolean: false + type_name: ~ - Declare: - - name: - span: - start: 840 - end: 841 - value: y + name: + span: + start: 840 + end: 841 + value: y + value: + span: + start: 844 + end: 848 value: - span: - start: 844 - end: 848 - value: - Constant: - Boolean: true - type_name: ~ + Constant: + Boolean: true + type_name: ~ - Declare: - - name: - span: - start: 854 - end: 855 - value: z + name: + span: + start: 854 + end: 855 + value: z + value: + span: + start: 858 + end: 863 value: - span: - start: 858 - end: 863 - value: - Constant: - Boolean: false - type_name: ~ + Constant: + Boolean: false + type_name: ~ - Expr: span: start: 865 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__mul_div_mod.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__mul_div_mod.as.snap index d9323f4..4a15252 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__mul_div_mod.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@op_precedence__mul_div_mod.as.snap @@ -6,47 +6,47 @@ input_file: samples/as2/op_precedence/mul_div_mod.as Ok: initial_script: - Declare: - - name: - span: - start: 75 - end: 76 - value: a + name: + span: + start: 75 + end: 76 + value: a + value: + span: + start: 79 + end: 81 value: - span: - start: 79 - end: 81 - value: - Constant: - Integer: 20 - type_name: ~ + Constant: + Integer: 20 + type_name: ~ - Declare: - - name: - span: - start: 87 - end: 88 - value: b + name: + span: + start: 87 + end: 88 + value: b + value: + span: + start: 91 + end: 92 value: - span: - start: 91 - end: 92 - value: - Constant: - Integer: 6 - type_name: ~ + Constant: + Integer: 6 + type_name: ~ - Declare: - - name: - span: - start: 98 - end: 99 - value: c + name: + span: + start: 98 + end: 99 + value: c + value: + span: + start: 102 + end: 103 value: - span: - start: 102 - end: 103 - value: - Constant: - Integer: 4 - type_name: ~ + Constant: + Integer: 4 + type_name: ~ - Expr: span: start: 131 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@operators.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@operators.as.snap index 38e4cd1..d0df60c 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@operators.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@operators.as.snap @@ -6,33 +6,33 @@ input_file: samples/as2/operators.as Ok: initial_script: - Declare: - - name: - span: - start: 109 - end: 110 - value: a + name: + span: + start: 109 + end: 110 + value: a + value: + span: + start: 113 + end: 115 value: - span: - start: 113 - end: 115 - value: - Constant: - Integer: 10 - type_name: ~ + Constant: + Integer: 10 + type_name: ~ - Declare: - - name: - span: - start: 121 - end: 122 - value: b + name: + span: + start: 121 + end: 122 + value: b + value: + span: + start: 125 + end: 126 value: - span: - start: 125 - end: 126 - value: - Constant: - Integer: 3 - type_name: ~ + Constant: + Integer: 3 + type_name: ~ - Expr: span: start: 129 @@ -334,33 +334,33 @@ Ok: Constant: Identifier: a - Declare: - - name: - span: - start: 466 - end: 471 - value: hello + name: + span: + start: 466 + end: 471 + value: hello + value: + span: + start: 474 + end: 481 value: - span: - start: 474 - end: 481 - value: - Constant: - String: Hello - type_name: ~ + Constant: + String: Hello + type_name: ~ - Declare: - - name: - span: - start: 487 - end: 492 - value: world + name: + span: + start: 487 + end: 492 + value: world + value: + span: + start: 495 + end: 502 value: - span: - start: 495 - end: 502 - value: - Constant: - String: World - type_name: ~ + Constant: + String: World + type_name: ~ - Expr: span: start: 504 @@ -410,19 +410,19 @@ Ok: Constant: Identifier: world - Declare: - - name: - span: - start: 605 - end: 606 - value: x + name: + span: + start: 605 + end: 606 + value: x + value: + span: + start: 609 + end: 610 value: - span: - start: 609 - end: 610 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Expr: span: start: 612 @@ -628,33 +628,33 @@ Ok: Constant: Integer: 2 - Declare: - - name: - span: - start: 848 - end: 852 - value: five + name: + span: + start: 848 + end: 852 + value: five + value: + span: + start: 855 + end: 856 value: - span: - start: 855 - end: 856 - value: - Constant: - Integer: 5 - type_name: ~ + Constant: + Integer: 5 + type_name: ~ - Declare: - - name: - span: - start: 862 - end: 867 - value: three + name: + span: + start: 862 + end: 867 + value: three + value: + span: + start: 870 + end: 871 value: - span: - start: 870 - end: 871 - value: - Constant: - Integer: 3 - type_name: ~ + Constant: + Integer: 3 + type_name: ~ - Expr: span: start: 873 @@ -1274,47 +1274,47 @@ Ok: Constant: Identifier: five - Declare: - - name: - span: - start: 1650 - end: 1653 - value: six + name: + span: + start: 1650 + end: 1653 + value: six + value: + span: + start: 1656 + end: 1657 value: - span: - start: 1656 - end: 1657 - value: - Constant: - Integer: 6 - type_name: ~ + Constant: + Integer: 6 + type_name: ~ - Declare: - - name: - span: - start: 1663 - end: 1668 - value: seven + name: + span: + start: 1663 + end: 1668 + value: seven + value: + span: + start: 1671 + end: 1672 value: - span: - start: 1671 - end: 1672 - value: - Constant: - Integer: 7 - type_name: ~ + Constant: + Integer: 7 + type_name: ~ - Declare: - - name: - span: - start: 1678 - end: 1686 - value: sevenStr + name: + span: + start: 1678 + end: 1686 + value: sevenStr + value: + span: + start: 1689 + end: 1692 value: - span: - start: 1689 - end: 1692 - value: - Constant: - String: "7" - type_name: ~ + Constant: + String: "7" + type_name: ~ - Expr: span: start: 1694 @@ -1640,33 +1640,33 @@ Ok: Constant: Identifier: seven - Declare: - - name: - span: - start: 2204 - end: 2205 - value: t + name: + span: + start: 2204 + end: 2205 + value: t + value: + span: + start: 2208 + end: 2212 value: - span: - start: 2208 - end: 2212 - value: - Constant: - Boolean: true - type_name: ~ + Constant: + Boolean: true + type_name: ~ - Declare: - - name: - span: - start: 2218 - end: 2219 - value: f + name: + span: + start: 2218 + end: 2219 + value: f + value: + span: + start: 2222 + end: 2227 value: - span: - start: 2222 - end: 2227 - value: - Constant: - Boolean: false - type_name: ~ + Constant: + Boolean: false + type_name: ~ - Expr: span: start: 2229 @@ -1770,51 +1770,51 @@ Ok: Constant: Identifier: t - Declare: - - name: - span: - start: 2362 - end: 2365 - value: max + name: + span: + start: 2362 + end: 2365 + value: max + value: + span: + start: 2368 + end: 2383 value: - span: - start: 2368 - end: 2383 - value: - Ternary: - condition: - span: - start: 2369 - end: 2374 - value: - BinaryOperator: - - GreaterThan - - span: - start: 2369 - end: 2370 - value: - Constant: - Identifier: a - - span: - start: 2373 - end: 2374 - value: - Constant: - Identifier: b - "yes": - span: - start: 2378 - end: 2379 - value: - Constant: - Identifier: a - "no": - span: - start: 2382 - end: 2383 - value: - Constant: - Identifier: b - type_name: ~ + Ternary: + condition: + span: + start: 2369 + end: 2374 + value: + BinaryOperator: + - GreaterThan + - span: + start: 2369 + end: 2370 + value: + Constant: + Identifier: a + - span: + start: 2373 + end: 2374 + value: + Constant: + Identifier: b + "yes": + span: + start: 2378 + end: 2379 + value: + Constant: + Identifier: a + "no": + span: + start: 2382 + end: 2383 + value: + Constant: + Identifier: b + type_name: ~ - Expr: span: start: 2385 @@ -1840,25 +1840,25 @@ Ok: Constant: Identifier: max - Declare: - - name: - span: - start: 2458 - end: 2461 - value: obj + name: + span: + start: 2458 + end: 2461 + value: obj + value: + span: + start: 2464 + end: 2478 value: - span: - start: 2464 - end: 2478 - value: - InitObject: - - - key - - span: - start: 2470 - end: 2477 - value: - Constant: - String: value - type_name: ~ + InitObject: + - - key + - span: + start: 2470 + end: 2477 + value: + Constant: + String: value + type_name: ~ - Expr: span: start: 2480 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@random_success.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@random_success.as.snap index 0e0ad05..1623bff 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@random_success.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@random_success.as.snap @@ -6,19 +6,19 @@ input_file: samples/as2/random_success.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 11 - value: success + name: + span: + start: 4 + end: 11 + value: success + value: + span: + start: 14 + end: 18 value: - span: - start: 14 - end: 18 - value: - Constant: - Boolean: true - type_name: ~ + Constant: + Boolean: true + type_name: ~ - If: condition: span: diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@registers.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@registers.as.snap new file mode 100644 index 0000000..63d14e3 --- /dev/null +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@registers.as.snap @@ -0,0 +1,443 @@ +--- +source: crates/rascal/src/program.rs +expression: parsed +input_file: samples/as2/registers.as +--- +Ok: + initial_script: + - Expr: + span: + start: 0 + end: 147 + value: + Function: + signature: + name: ~ + args: + - name: a + type_name: ~ + register: 7 + - name: b + type_name: ~ + register: ~ + return_type: ~ + body: + - Expr: + span: + start: 21 + end: 32 + value: + Trace: + span: + start: 27 + end: 31 + value: + Constant: + Register: 1 + - Expr: + span: + start: 38 + end: 54 + value: + Trace: + span: + start: 44 + end: 53 + value: + Constant: + Register: 2 + - Expr: + span: + start: 60 + end: 72 + value: + Trace: + span: + start: 66 + end: 71 + value: + Constant: + Register: 3 + - Expr: + span: + start: 78 + end: 90 + value: + Trace: + span: + start: 84 + end: 89 + value: + Constant: + Register: 4 + - Expr: + span: + start: 96 + end: 110 + value: + Trace: + span: + start: 102 + end: 109 + value: + Constant: + Register: 5 + - Expr: + span: + start: 116 + end: 130 + value: + Trace: + span: + start: 122 + end: 129 + value: + Constant: + Register: 6 + - Expr: + span: + start: 136 + end: 144 + value: + Trace: + span: + start: 142 + end: 143 + value: + Constant: + Register: 7 + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: true + used_in_inner_scope: false + super: + used: true + used_in_inner_scope: false + _root: + used: true + used_in_inner_scope: false + _parent: + used: true + used_in_inner_scope: false + _global: + used: true + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 8 + preload_this: true + suppress_this: false + preload_arguments: true + suppress_arguments: false + preload_super: true + suppress_super: false + preload_root: true + preload_parent: true + preload_global: true + - Expr: + span: + start: 148 + end: 334 + value: + Function: + signature: + name: ~ + args: + - name: a + type_name: ~ + register: ~ + - name: b + type_name: ~ + register: ~ + return_type: ~ + body: + - Expr: + span: + start: 169 + end: 180 + value: + Trace: + span: + start: 175 + end: 179 + value: + Constant: + Identifier: this + - Expr: + span: + start: 186 + end: 202 + value: + Trace: + span: + start: 192 + end: 201 + value: + Constant: + Identifier: arguments + - Expr: + span: + start: 208 + end: 220 + value: + Trace: + span: + start: 214 + end: 219 + value: + Constant: + Identifier: super + - Expr: + span: + start: 226 + end: 238 + value: + Trace: + span: + start: 232 + end: 237 + value: + Constant: + Identifier: _root + - Expr: + span: + start: 244 + end: 258 + value: + Trace: + span: + start: 250 + end: 257 + value: + Constant: + Identifier: _parent + - Expr: + span: + start: 264 + end: 278 + value: + Trace: + span: + start: 270 + end: 277 + value: + Constant: + Identifier: _global + - Expr: + span: + start: 284 + end: 292 + value: + Trace: + span: + start: 290 + end: 291 + value: + Constant: + Identifier: a + - Expr: + span: + start: 298 + end: 306 + value: + GetVariable: + span: + start: 303 + end: 305 + value: + Constant: + String: "" + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: true + used_in_inner_scope: false + super: + used: true + used_in_inner_scope: false + _root: + used: true + used_in_inner_scope: false + _parent: + used: true + used_in_inner_scope: false + _global: + used: true + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: true + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 336 + end: 365 + value: + Function: + signature: + name: ~ + args: + - name: a + type_name: ~ + register: ~ + - name: b + type_name: ~ + register: ~ + return_type: ~ + body: + - Block: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: false + used_in_inner_scope: false + b: + used: false + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 367 + end: 439 + value: + Function: + signature: + name: ~ + args: + - name: a + type_name: ~ + register: ~ + - name: b + type_name: ~ + register: ~ + return_type: ~ + body: + - Declare: + name: + span: + start: 392 + end: 393 + value: c + value: + span: + start: 396 + end: 397 + value: + Constant: + Integer: 2 + type_name: ~ + - Expr: + span: + start: 403 + end: 411 + value: + GetVariable: + span: + start: 408 + end: 410 + value: + Constant: + String: "" + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: false + used_in_inner_scope: false + b: + used: false + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: true + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false + interfaces: [] + classes: [] + custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap index 7ec4a3e..bae09e4 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap @@ -6,26 +6,26 @@ input_file: samples/as2/regressions/ruffle_avm1_edittext_drag_select.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 12 - value: listener + name: + span: + start: 4 + end: 12 + value: listener + value: + span: + start: 15 + end: 18 value: - span: - start: 15 - end: 18 - value: - New: - name: - span: - start: 19 - end: 25 - value: - Constant: - Identifier: Object - args: [] - type_name: ~ + New: + name: + span: + start: 19 + end: 25 + value: + Constant: + Identifier: Object + args: [] + type_name: ~ - Expr: span: start: 37 @@ -100,7 +100,7 @@ Ok: end: 97 value: Constant: - Identifier: _root + Register: 1 - span: start: 98 end: 105 @@ -123,13 +123,45 @@ Ok: end: 119 value: Constant: - Identifier: _root + Register: 1 - span: start: 120 end: 127 value: Constant: String: _ymouse + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: true + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - Expr: span: start: 140 @@ -204,7 +236,7 @@ Ok: end: 196 value: Constant: - Identifier: _root + Register: 1 - span: start: 197 end: 204 @@ -227,7 +259,7 @@ Ok: end: 218 value: Constant: - Identifier: _root + Register: 1 - span: start: 219 end: 226 @@ -396,6 +428,39 @@ Ok: value: Constant: String: "\\n" + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: true + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - text + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - Expr: span: start: 351 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap index 6835482..5dd7b9d 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap @@ -58,21 +58,23 @@ Ok: value: Constant: Integer: 0 - - Declare: - - name: - span: - start: 340 - end: 344 - value: oldX - value: ~ - type_name: ~ - - name: - span: - start: 346 - end: 350 - value: oldY - value: ~ - type_name: ~ + - Block: + - Declare: + name: + span: + start: 340 + end: 344 + value: oldX + value: ~ + type_name: ~ + - Declare: + name: + span: + start: 346 + end: 350 + value: oldY + value: ~ + type_name: ~ - Expr: span: start: 353 @@ -233,79 +235,89 @@ Ok: value: Constant: Identifier: _ymouse - - Declare: - - name: - span: - start: 527 - end: 532 - value: clips - value: - span: - start: 535 - end: 577 - value: - InitArray: - - span: - start: 536 - end: 538 - value: - Constant: - Identifier: id - - span: - start: 540 - end: 542 - value: - Constant: - Identifier: zs - - span: - start: 544 - end: 546 - value: - Constant: - Identifier: ip - - span: - start: 548 - end: 550 - value: - Constant: - Identifier: fp - - span: - start: 552 - end: 557 - value: - Constant: - Identifier: s42fp - - span: - start: 559 - end: 565 - value: - Constant: - Identifier: s133fp - - span: - start: 567 - end: 576 - value: - Constant: - Identifier: s133fpr15 - type_name: ~ + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 535 + end: 577 + value: + InitArray: + - span: + start: 536 + end: 538 + value: + Constant: + Identifier: id + - span: + start: 540 + end: 542 + value: + Constant: + Identifier: zs + - span: + start: 544 + end: 546 + value: + Constant: + Identifier: ip + - span: + start: 548 + end: 550 + value: + Constant: + Identifier: fp + - span: + start: 552 + end: 557 + value: + Constant: + Identifier: s42fp + - span: + start: 559 + end: 565 + value: + Constant: + Identifier: s133fp + - span: + start: 567 + end: 576 + value: + Constant: + Identifier: s133fpr15 - ForIn: condition: Classic: initialize: - Declare: - - name: - span: - start: 592 - end: 593 - value: i - value: - span: - start: 594 - end: 595 - value: - Constant: - Integer: 0 - type_name: ~ + Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 594 + end: 595 + value: + Constant: + Integer: 0 condition: - span: start: 597 @@ -318,7 +330,7 @@ Ok: end: 598 value: Constant: - Identifier: i + Register: 2 - span: start: 604 end: 611 @@ -329,7 +341,7 @@ Ok: end: 604 value: Constant: - Identifier: clips + Register: 1 - span: start: 605 end: 611 @@ -348,34 +360,39 @@ Ok: end: 614 value: Constant: - Identifier: i + Register: 2 body: Block: - - Declare: - - name: - span: - start: 632 - end: 636 - value: clip - value: - span: - start: 644 - end: 647 - value: - Field: - - span: - start: 639 - end: 644 - value: - Constant: - Identifier: clips - - span: - start: 645 - end: 646 - value: - Constant: - Identifier: i - type_name: ~ + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 644 + end: 647 + value: + Field: + - span: + start: 639 + end: 644 + value: + Constant: + Register: 1 + - span: + start: 645 + end: 646 + value: + Constant: + Register: 2 - Expr: span: start: 657 @@ -416,7 +433,7 @@ Ok: end: 667 value: Constant: - Identifier: clip + Register: 3 - span: start: 668 end: 673 @@ -439,7 +456,7 @@ Ok: end: 682 value: Constant: - Identifier: clip + Register: 3 - span: start: 683 end: 690 @@ -462,7 +479,7 @@ Ok: end: 699 value: Constant: - Identifier: clip + Register: 3 - span: start: 700 end: 707 @@ -481,6 +498,58 @@ Ok: value: Constant: String: "" + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + clips: + used: true + used_in_inner_scope: false + i: + used: true + used_in_inner_scope: false + clip: + used: true + used_in_inner_scope: false + referenced_variables: + - _xmouse + - oldX + - _ymouse + - oldY + - id + - zs + - ip + - fp + - s42fp + - s133fp + - s133fpr15 + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 734 @@ -510,6 +579,39 @@ Ok: Constant: Identifier: dump args: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - dump + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false interfaces: [] classes: [] custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap index ce7257f..63356e2 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap @@ -6,19 +6,19 @@ input_file: samples/as2/regressions/ruffle_avm1_movieclip_lockroot.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 10 - value: levels + name: + span: + start: 4 + end: 10 + value: levels + value: + span: + start: 13 + end: 14 value: - span: - start: 13 - end: 14 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Expr: span: start: 17 @@ -34,83 +34,89 @@ Ok: args: - name: value type_name: ~ + register: 2 return_type: ~ body: - - Declare: - - name: - span: - start: 48 - end: 58 - value: valueLabel - value: - span: - start: 61 - end: 115 - value: - Ternary: - condition: - span: - start: 68 - end: 85 - value: - BinaryOperator: - - Equal - - span: - start: 61 - end: 73 - value: - TypeOf: - span: - start: 68 - end: 73 - value: - Constant: - Identifier: value - - span: - start: 77 - end: 85 - value: - Constant: - String: string - "yes": - span: - start: 88 - end: 107 - value: - BinaryOperator: - - Add - - span: - start: 88 - end: 100 - value: - BinaryOperator: - - Add - - span: - start: 88 - end: 92 - value: - Constant: - String: "\"" - - span: - start: 95 - end: 100 + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 61 + end: 115 + value: + Ternary: + condition: + span: + start: 68 + end: 85 + value: + BinaryOperator: + - Equal + - span: + start: 61 + end: 73 + value: + TypeOf: + span: + start: 68 + end: 73 value: Constant: - Identifier: value - - span: - start: 103 - end: 107 - value: - Constant: - String: "\"" - "no": - span: - start: 110 - end: 115 - value: - Constant: - Identifier: value - type_name: ~ + Register: 2 + - span: + start: 77 + end: 85 + value: + Constant: + String: string + "yes": + span: + start: 88 + end: 107 + value: + BinaryOperator: + - Add + - span: + start: 88 + end: 100 + value: + BinaryOperator: + - Add + - span: + start: 88 + end: 92 + value: + Constant: + String: "\"" + - span: + start: 95 + end: 100 + value: + Constant: + Register: 2 + - span: + start: 103 + end: 107 + value: + Constant: + String: "\"" + "no": + span: + start: 110 + end: 115 + value: + Constant: + Register: 2 - Expr: span: start: 122 @@ -128,7 +134,7 @@ Ok: end: 122 value: Constant: - Identifier: this + Register: 1 - span: start: 123 end: 132 @@ -158,7 +164,7 @@ Ok: end: 147 value: Constant: - Identifier: this + Register: 1 - span: start: 148 end: 157 @@ -170,7 +176,7 @@ Ok: end: 165 value: Constant: - Identifier: value + Register: 2 - If: condition: span: @@ -183,7 +189,7 @@ Ok: end: 176 value: Constant: - Identifier: this + Register: 1 - span: start: 177 end: 186 @@ -221,7 +227,7 @@ Ok: end: 242 value: Constant: - Identifier: valueLabel + Register: 3 - span: start: 245 end: 264 @@ -245,7 +251,7 @@ Ok: end: 273 value: Constant: - Identifier: this + Register: 1 - span: start: 274 end: 283 @@ -277,7 +283,7 @@ Ok: end: 311 value: Constant: - Identifier: this + Register: 1 - span: start: 312 end: 321 @@ -307,7 +313,7 @@ Ok: end: 335 value: Constant: - Identifier: this + Register: 1 - span: start: 336 end: 345 @@ -319,7 +325,7 @@ Ok: end: 353 value: Constant: - Identifier: value + Register: 2 - If: condition: span: @@ -338,7 +344,7 @@ Ok: end: 365 value: Constant: - Identifier: this + Register: 1 - span: start: 366 end: 375 @@ -376,7 +382,7 @@ Ok: end: 431 value: Constant: - Identifier: valueLabel + Register: 3 - span: start: 434 end: 454 @@ -402,7 +408,7 @@ Ok: end: 476 value: Constant: - Identifier: this + Register: 1 - span: start: 477 end: 486 @@ -444,13 +450,51 @@ Ok: end: 547 value: Constant: - Identifier: valueLabel + Register: 3 - span: start: 550 end: 567 value: Constant: String: " has no effect." + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + value: + used: true + used_in_inner_scope: false + valueLabel: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: true + suppress_this: false + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 573 @@ -513,7 +557,7 @@ Ok: end: 663 value: Constant: - Identifier: this + Register: 1 - span: start: 666 end: 678 @@ -525,7 +569,7 @@ Ok: end: 686 value: Constant: - Identifier: _root + Register: 2 - span: start: 689 end: 706 @@ -542,7 +586,7 @@ Ok: end: 713 value: Constant: - Identifier: this + Register: 1 - span: start: 714 end: 723 @@ -854,6 +898,42 @@ Ok: end: 1100 value: InitObject: [] + scope: + defined_variables: + this: + used: true + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: true + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - testSet + - undefined + - "null" + - "NaN" + could_reference_anything: false + register_count: 3 + preload_this: true + suppress_this: false + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - Expr: span: start: 1114 @@ -1140,6 +1220,46 @@ Ok: value: Constant: Integer: 250 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - createEmptyMovieClip + - levels + - child1 + - child2 + - child3 + - setTimeout + - createGrandChildren + - testAllChildren + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 1661 @@ -1177,7 +1297,7 @@ Ok: end: 1720 value: Constant: - Identifier: _root + Register: 1 - span: start: 1721 end: 1727 @@ -1236,7 +1356,7 @@ Ok: end: 1776 value: Constant: - Identifier: _root + Register: 1 - span: start: 1777 end: 1783 @@ -1284,7 +1404,7 @@ Ok: end: 1821 value: Constant: - Identifier: _root + Register: 1 - span: start: 1822 end: 1828 @@ -1343,7 +1463,7 @@ Ok: end: 1877 value: Constant: - Identifier: _root + Register: 1 - span: start: 1878 end: 1884 @@ -1395,7 +1515,7 @@ Ok: end: 1916 value: Constant: - Identifier: _root + Register: 1 - span: start: 1917 end: 1923 @@ -1443,7 +1563,7 @@ Ok: end: 1961 value: Constant: - Identifier: _root + Register: 1 - span: start: 1962 end: 1968 @@ -1502,7 +1622,7 @@ Ok: end: 2017 value: Constant: - Identifier: _root + Register: 1 - span: start: 2018 end: 2024 @@ -1550,7 +1670,7 @@ Ok: end: 2063 value: Constant: - Identifier: _root + Register: 1 - span: start: 2064 end: 2070 @@ -1609,7 +1729,7 @@ Ok: end: 2119 value: Constant: - Identifier: _root + Register: 1 - span: start: 2120 end: 2126 @@ -1657,7 +1777,7 @@ Ok: end: 2164 value: Constant: - Identifier: _root + Register: 1 - span: start: 2165 end: 2171 @@ -1716,7 +1836,7 @@ Ok: end: 2220 value: Constant: - Identifier: _root + Register: 1 - span: start: 2221 end: 2227 @@ -1768,7 +1888,7 @@ Ok: end: 2259 value: Constant: - Identifier: _root + Register: 1 - span: start: 2260 end: 2266 @@ -1816,7 +1936,7 @@ Ok: end: 2304 value: Constant: - Identifier: _root + Register: 1 - span: start: 2305 end: 2311 @@ -1875,7 +1995,7 @@ Ok: end: 2360 value: Constant: - Identifier: _root + Register: 1 - span: start: 2361 end: 2367 @@ -1923,7 +2043,7 @@ Ok: end: 2406 value: Constant: - Identifier: _root + Register: 1 - span: start: 2407 end: 2413 @@ -1982,7 +2102,7 @@ Ok: end: 2462 value: Constant: - Identifier: _root + Register: 1 - span: start: 2463 end: 2469 @@ -2030,7 +2150,7 @@ Ok: end: 2507 value: Constant: - Identifier: _root + Register: 1 - span: start: 2508 end: 2514 @@ -2089,7 +2209,7 @@ Ok: end: 2563 value: Constant: - Identifier: _root + Register: 1 - span: start: 2564 end: 2570 @@ -2141,7 +2261,7 @@ Ok: end: 2602 value: Constant: - Identifier: _root + Register: 1 - span: start: 2603 end: 2609 @@ -2189,7 +2309,7 @@ Ok: end: 2647 value: Constant: - Identifier: _root + Register: 1 - span: start: 2648 end: 2654 @@ -2248,7 +2368,7 @@ Ok: end: 2703 value: Constant: - Identifier: _root + Register: 1 - span: start: 2704 end: 2710 @@ -2274,6 +2394,39 @@ Ok: value: Constant: String: child.swf + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: true + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - levels + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - Expr: span: start: 2745 @@ -2311,7 +2464,7 @@ Ok: end: 2780 value: Constant: - Identifier: _root + Register: 1 - span: start: 2781 end: 2787 @@ -2347,7 +2500,7 @@ Ok: end: 2837 value: Constant: - Identifier: _root + Register: 1 - span: start: 2838 end: 2844 @@ -2383,7 +2536,7 @@ Ok: end: 2890 value: Constant: - Identifier: _root + Register: 1 - span: start: 2891 end: 2897 @@ -2425,7 +2578,7 @@ Ok: end: 2919 value: Constant: - Identifier: _root + Register: 1 - span: start: 2920 end: 2926 @@ -2466,7 +2619,7 @@ Ok: end: 2973 value: Constant: - Identifier: _root + Register: 1 - span: start: 2974 end: 2980 @@ -2513,7 +2666,7 @@ Ok: end: 3037 value: Constant: - Identifier: _root + Register: 1 - span: start: 3038 end: 3044 @@ -2560,7 +2713,7 @@ Ok: end: 3097 value: Constant: - Identifier: _root + Register: 1 - span: start: 3098 end: 3104 @@ -2613,7 +2766,7 @@ Ok: end: 3133 value: Constant: - Identifier: _root + Register: 1 - span: start: 3134 end: 3140 @@ -2660,7 +2813,7 @@ Ok: end: 3194 value: Constant: - Identifier: _root + Register: 1 - span: start: 3195 end: 3201 @@ -2707,7 +2860,7 @@ Ok: end: 3257 value: Constant: - Identifier: _root + Register: 1 - span: start: 3258 end: 3264 @@ -2754,7 +2907,7 @@ Ok: end: 3317 value: Constant: - Identifier: _root + Register: 1 - span: start: 3318 end: 3324 @@ -2807,7 +2960,7 @@ Ok: end: 3353 value: Constant: - Identifier: _root + Register: 1 - span: start: 3354 end: 3360 @@ -2854,7 +3007,7 @@ Ok: end: 3414 value: Constant: - Identifier: _root + Register: 1 - span: start: 3415 end: 3421 @@ -2901,7 +3054,7 @@ Ok: end: 3477 value: Constant: - Identifier: _root + Register: 1 - span: start: 3478 end: 3484 @@ -2948,7 +3101,7 @@ Ok: end: 3537 value: Constant: - Identifier: _root + Register: 1 - span: start: 3538 end: 3544 @@ -3001,7 +3154,7 @@ Ok: end: 3573 value: Constant: - Identifier: _root + Register: 1 - span: start: 3574 end: 3580 @@ -3033,6 +3186,38 @@ Ok: value: Constant: String: All tests done. + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: true + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - Expr: span: start: 3658 @@ -3076,6 +3261,40 @@ Ok: Constant: Identifier: testChildren args: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - testSelf + - testChildren + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 3709 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regular_imports.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regular_imports.as.snap index 121a693..e6971e0 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regular_imports.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@regular_imports.as.snap @@ -76,60 +76,60 @@ Ok: Constant: String: Point - Declare: - - name: - span: - start: 97 - end: 105 - value: myBitmap + name: + span: + start: 97 + end: 105 + value: myBitmap + value: + span: + start: 108 + end: 131 value: - span: - start: 108 - end: 131 - value: - New: - name: - span: - start: 112 - end: 122 + New: + name: + span: + start: 112 + end: 122 + value: + Field: + - span: + start: 112 + end: 122 + value: + Field: + - span: + start: 112 + end: 122 + value: + Constant: + Identifier: flash + - span: + start: 112 + end: 122 + value: + Constant: + String: display + - span: + start: 112 + end: 122 + value: + Constant: + String: BitmapData + args: + - span: + start: 123 + end: 126 value: - Field: - - span: - start: 112 - end: 122 - value: - Field: - - span: - start: 112 - end: 122 - value: - Constant: - Identifier: flash - - span: - start: 112 - end: 122 - value: - Constant: - String: display - - span: - start: 112 - end: 122 - value: - Constant: - String: BitmapData - args: - - span: - start: 123 - end: 126 - value: - Constant: - Integer: 100 - - span: - start: 128 - end: 131 - value: - Constant: - Integer: 100 - type_name: ~ + Constant: + Integer: 100 + - span: + start: 128 + end: 131 + value: + Constant: + Integer: 100 + type_name: ~ - Expr: span: start: 134 @@ -143,60 +143,60 @@ Ok: Constant: Identifier: myBitmap - Declare: - - name: - span: - start: 156 - end: 163 - value: myPoint + name: + span: + start: 156 + end: 163 + value: myPoint + value: + span: + start: 166 + end: 182 value: - span: - start: 166 - end: 182 - value: - New: - name: - span: - start: 170 - end: 175 + New: + name: + span: + start: 170 + end: 175 + value: + Field: + - span: + start: 170 + end: 175 + value: + Field: + - span: + start: 170 + end: 175 + value: + Constant: + Identifier: flash + - span: + start: 170 + end: 175 + value: + Constant: + String: geom + - span: + start: 170 + end: 175 + value: + Constant: + String: Point + args: + - span: + start: 176 + end: 178 value: - Field: - - span: - start: 170 - end: 175 - value: - Field: - - span: - start: 170 - end: 175 - value: - Constant: - Identifier: flash - - span: - start: 170 - end: 175 - value: - Constant: - String: geom - - span: - start: 170 - end: 175 - value: - Constant: - String: Point - args: - - span: - start: 176 - end: 178 - value: - Constant: - Integer: 10 - - span: - start: 180 - end: 182 - value: - Constant: - Integer: 20 - type_name: ~ + Constant: + Integer: 10 + - span: + start: 180 + end: 182 + value: + Constant: + Integer: 20 + type_name: ~ - Expr: span: start: 185 @@ -340,6 +340,39 @@ Ok: value: Constant: Integer: 5 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - flash + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 305 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@scoping.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@scoping.as.snap new file mode 100644 index 0000000..54535fd --- /dev/null +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@scoping.as.snap @@ -0,0 +1,2056 @@ +--- +source: crates/rascal/src/program.rs +expression: parsed +input_file: samples/as2/scoping.as +--- +Ok: + initial_script: + - Expr: + span: + start: 0 + end: 118 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 22 + end: 31 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 42 + end: 51 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 62 + end: 71 + value: + Constant: + String: outer_c + - Block: + - Expr: + span: + start: 78 + end: 91 + value: + BinaryOperator: + - Assign + - span: + start: 78 + end: 79 + value: + Constant: + Register: 1 + - span: + start: 82 + end: 91 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 103 + end: 112 + value: + Constant: + String: inner_b + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 120 + end: 247 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 142 + end: 151 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 162 + end: 171 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 182 + end: 191 + value: + Constant: + String: outer_c + - If: + condition: + span: + start: 198 + end: 201 + value: + Constant: + String: a + "yes": + Block: + - Expr: + span: + start: 207 + end: 220 + value: + BinaryOperator: + - Assign + - span: + start: 207 + end: 208 + value: + Constant: + Register: 1 + - span: + start: 211 + end: 220 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 232 + end: 241 + value: + Constant: + String: inner_b + "no": ~ + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 249 + end: 387 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 271 + end: 280 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 291 + end: 300 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 311 + end: 320 + value: + Constant: + String: outer_c + - If: + condition: + span: + start: 327 + end: 331 + value: + UnaryOperator: + - LogicalNot + - span: + start: 328 + end: 331 + value: + Constant: + String: a + "yes": + Block: [] + "no": + Block: + - Expr: + span: + start: 347 + end: 360 + value: + BinaryOperator: + - Assign + - span: + start: 347 + end: 348 + value: + Constant: + Register: 1 + - span: + start: 351 + end: 360 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 372 + end: 381 + value: + Constant: + String: inner_b + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 389 + end: 535 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 411 + end: 420 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 431 + end: 440 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 451 + end: 460 + value: + Constant: + String: outer_c + - ForIn: + condition: + Classic: + initialize: + Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 4 + - span: + start: 476 + end: 477 + value: + Constant: + Integer: 0 + condition: + - span: + start: 479 + end: 484 + value: + BinaryOperator: + - LessThan + - span: + start: 479 + end: 480 + value: + Constant: + Register: 4 + - span: + start: 483 + end: 484 + value: + Constant: + Integer: 1 + update: + - span: + start: 487 + end: 489 + value: + UnaryOperator: + - Increment: Postfix + - span: + start: 486 + end: 487 + value: + Constant: + Register: 4 + body: + Block: + - Expr: + span: + start: 495 + end: 508 + value: + BinaryOperator: + - Assign + - span: + start: 495 + end: 496 + value: + Constant: + Register: 1 + - span: + start: 499 + end: 508 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 520 + end: 529 + value: + Constant: + String: inner_b + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + i: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 5 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 537 + end: 683 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 559 + end: 568 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 579 + end: 588 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 599 + end: 608 + value: + Constant: + String: outer_c + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 4 + - span: + start: 619 + end: 620 + value: + Constant: + Integer: 0 + - While: + condition: + span: + start: 631 + end: 637 + value: + BinaryOperator: + - LessThan + - span: + start: 631 + end: 633 + value: + UnaryOperator: + - Increment: Postfix + - span: + start: 630 + end: 631 + value: + Constant: + Register: 4 + - span: + start: 636 + end: 637 + value: + Constant: + Integer: 1 + body: + Block: + - Expr: + span: + start: 643 + end: 656 + value: + BinaryOperator: + - Assign + - span: + start: 643 + end: 644 + value: + Constant: + Register: 1 + - span: + start: 647 + end: 656 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 668 + end: 677 + value: + Constant: + String: inner_b + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + i: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 5 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 685 + end: 836 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 707 + end: 716 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 727 + end: 736 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 747 + end: 756 + value: + Constant: + String: outer_c + - Switch: + target: + span: + start: 767 + end: 768 + value: + Constant: + Integer: 1 + elements: + - Case: + span: + start: 779 + end: 780 + value: + Constant: + Integer: 1 + - Statement: + Expr: + span: + start: 785 + end: 798 + value: + BinaryOperator: + - Assign + - span: + start: 785 + end: 786 + value: + Constant: + Register: 1 + - span: + start: 789 + end: 798 + value: + Constant: + String: inner_a + - Statement: + Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 811 + end: 820 + value: + Constant: + String: inner_b + - Statement: Break + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 838 + end: 990 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 860 + end: 869 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 880 + end: 889 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 900 + end: 909 + value: + Constant: + String: outer_c + - Try: + try_body: + - Throw: + - span: + start: 926 + end: 931 + value: + Constant: + String: err + typed_catches: [] + catch_all: + name: + span: + start: 943 + end: 944 + value: e + body: + - Expr: + span: + start: 950 + end: 963 + value: + BinaryOperator: + - Assign + - span: + start: 950 + end: 951 + value: + Constant: + Register: 1 + - span: + start: 954 + end: 963 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 975 + end: 984 + value: + Constant: + String: inner_b + finally: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 992 + end: 1165 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 1014 + end: 1023 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 1034 + end: 1043 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 1054 + end: 1063 + value: + Constant: + String: outer_c + - Try: + try_body: + - Expr: + span: + start: 1074 + end: 1085 + value: + BinaryOperator: + - Assign + - span: + start: 1074 + end: 1075 + value: + Constant: + Register: 1 + - span: + start: 1078 + end: 1085 + value: + Constant: + String: try_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 1097 + end: 1104 + value: + Constant: + String: try_b + typed_catches: [] + catch_all: ~ + finally: + - Expr: + span: + start: 1121 + end: 1136 + value: + BinaryOperator: + - Assign + - span: + start: 1121 + end: 1122 + value: + Constant: + Register: 1 + - span: + start: 1125 + end: 1136 + value: + Constant: + String: finally_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 1148 + end: 1159 + value: + Constant: + String: finally_b + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 1167 + end: 1312 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Declare: + name: + span: + start: 1185 + end: 1186 + value: a + value: + span: + start: 1189 + end: 1198 + value: + Constant: + String: outer_a + type_name: ~ + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 1209 + end: 1218 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 1229 + end: 1238 + value: + Constant: + String: outer_c + - Expr: + span: + start: 1241 + end: 1300 + value: + Function: + signature: + name: + span: + start: 1250 + end: 1255 + value: inner + args: [] + return_type: ~ + body: + - Expr: + span: + start: 1262 + end: 1275 + value: + BinaryOperator: + - Assign + - span: + start: 1262 + end: 1263 + value: + Constant: + Identifier: a + - span: + start: 1266 + end: 1275 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 1287 + end: 1296 + value: + Constant: + String: inner_b + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + referenced_variables: + - a + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 1302 + end: 1309 + value: + Call: + name: + span: + start: 1302 + end: 1307 + value: + Constant: + Identifier: inner + args: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: true + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + referenced_variables: + - inner + could_reference_anything: false + register_count: 3 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 1314 + end: 1472 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 1 + - span: + start: 1336 + end: 1345 + value: + Constant: + String: outer_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 1356 + end: 1365 + value: + Constant: + String: outer_b + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 1376 + end: 1385 + value: + Constant: + String: outer_c + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 4 + - span: + start: 1398 + end: 1406 + value: + InitObject: + - - x + - span: + start: 1403 + end: 1404 + value: + Constant: + Integer: 1 + - ForIn: + condition: + Enumerate: + variable: k + declare: true + object: + span: + start: 1423 + end: 1426 + value: + Constant: + Register: 4 + body: + Block: + - Expr: + span: + start: 1432 + end: 1445 + value: + BinaryOperator: + - Assign + - span: + start: 1432 + end: 1433 + value: + Constant: + Register: 1 + - span: + start: 1436 + end: 1445 + value: + Constant: + String: inner_a + - Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 2 + - span: + start: 1457 + end: 1466 + value: + Constant: + String: inner_b + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + c: + used: true + used_in_inner_scope: false + obj: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 5 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 1474 + end: 1646 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Declare: + name: + span: + start: 1492 + end: 1493 + value: a + value: + span: + start: 1496 + end: 1505 + value: + Constant: + String: outer_a + type_name: ~ + - Expr: + span: + start: 1508 + end: 1634 + value: + Function: + signature: + name: + span: + start: 1517 + end: 1522 + value: inner + args: [] + return_type: ~ + body: + - Expr: + span: + start: 1616 + end: 1630 + value: + Trace: + span: + start: 1622 + end: 1629 + value: + GetVariable: + span: + start: 1627 + end: 1628 + value: + Constant: + Identifier: a + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - a + could_reference_anything: true + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 1636 + end: 1643 + value: + Call: + name: + span: + start: 1636 + end: 1641 + value: + Constant: + Identifier: inner + args: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: true + referenced_variables: + - inner + could_reference_anything: true + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false + - Expr: + span: + start: 1648 + end: 1799 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Declare: + name: + span: + start: 1666 + end: 1667 + value: a + value: + span: + start: 1670 + end: 1673 + value: + Constant: + String: a + type_name: ~ + - Expr: + span: + start: 1763 + end: 1797 + value: + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - With: + target: + span: + start: 1783 + end: 1790 + value: + Constant: + Identifier: _global + body: + Block: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: true + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: true + register_count: 0 + preload_this: false + suppress_this: false + preload_arguments: false + suppress_arguments: false + preload_super: false + suppress_super: false + preload_root: false + preload_parent: false + preload_global: false + interfaces: [] + classes: [] + custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@simplifier.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@simplifier.as.snap new file mode 100644 index 0000000..f6ea7cd --- /dev/null +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@simplifier.as.snap @@ -0,0 +1,34 @@ +--- +source: crates/rascal/src/program.rs +expression: parsed +input_file: samples/as2/simplifier.as +--- +Ok: + initial_script: + - Expr: + span: + start: 0 + end: 12 + value: + Trace: + span: + start: 6 + end: 11 + value: + Constant: + Boolean: false + - Expr: + span: + start: 14 + end: 27 + value: + Trace: + span: + start: 20 + end: 26 + value: + Constant: + Boolean: true + interfaces: [] + classes: [] + custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@switch_in_loop_break_continue.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@switch_in_loop_break_continue.as.snap index 76b440e..1202804 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@switch_in_loop_break_continue.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@switch_in_loop_break_continue.as.snap @@ -10,19 +10,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 9 - end: 10 - value: i + name: + span: + start: 9 + end: 10 + value: i + value: + span: + start: 13 + end: 14 value: - span: - start: 13 - end: 14 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 16 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch.as.snap index d095cbe..4a995c6 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch.as.snap @@ -32,19 +32,19 @@ Ok: Constant: String: try! - Declare: - - name: - span: - start: 67 - end: 74 - value: message + name: + span: + start: 67 + end: 74 + value: message + value: + span: + start: 77 + end: 91 value: - span: - start: 77 - end: 91 - value: - Constant: - String: Hello World! - type_name: ~ + Constant: + String: Hello World! + type_name: ~ - Throw: - span: start: 103 @@ -225,19 +225,19 @@ Ok: - Try: try_body: - Declare: - - name: - span: - start: 442 - end: 449 - value: message + name: + span: + start: 442 + end: 449 + value: message + value: + span: + start: 452 + end: 461 value: - span: - start: 452 - end: 461 - value: - Constant: - String: message - type_name: ~ + Constant: + String: message + type_name: ~ typed_catches: [] catch_all: name: @@ -286,19 +286,19 @@ Ok: - Try: try_body: - Declare: - - name: - span: - start: 572 - end: 579 - value: message + name: + span: + start: 572 + end: 579 + value: message + value: + span: + start: 582 + end: 591 value: - span: - start: 582 - end: 591 - value: - Constant: - String: message - type_name: ~ + Constant: + String: message + type_name: ~ - If: condition: span: diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_finally_break_continue.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_finally_break_continue.as.snap index a6c6ccf..7abfe45 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_finally_break_continue.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_finally_break_continue.as.snap @@ -10,19 +10,19 @@ Ok: Classic: initialize: Declare: - - name: - span: - start: 9 - end: 10 - value: i + name: + span: + start: 9 + end: 10 + value: i + value: + span: + start: 13 + end: 14 value: - span: - start: 13 - end: 14 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ condition: - span: start: 16 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_stack.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_stack.as.snap index d08141e..093c36d 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_stack.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@try_catch_stack.as.snap @@ -6,128 +6,194 @@ input_file: samples/as2/try_catch_stack.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 7 - value: bad + name: + span: + start: 4 + end: 7 + value: bad + value: + span: + start: 10 + end: 46 value: - span: - start: 10 - end: 46 - value: - Function: - signature: - name: ~ - args: [] - return_type: ~ - body: - - Throw: - - span: - start: 33 - end: 43 - value: - Constant: - String: oh noes! - type_name: ~ + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Throw: + - span: + start: 33 + end: 43 + value: + Constant: + String: oh noes! + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + type_name: ~ - Declare: - - name: - span: - start: 53 - end: 56 - value: foo + name: + span: + start: 53 + end: 56 + value: foo + value: + span: + start: 59 + end: 188 value: - span: - start: 59 - end: 188 - value: - Function: - signature: - name: ~ - args: [] - return_type: ~ - body: - - Try: - try_body: - - Return: - - span: - start: 97 - end: 112 - value: - BinaryOperator: - - Add - - span: - start: 97 - end: 98 - value: - Constant: - Integer: 1 - - span: - start: 102 - end: 111 - value: - BinaryOperator: - - Add - - span: - start: 102 - end: 103 - value: - Constant: - Integer: 1 - - span: - start: 106 - end: 111 - value: - Call: - name: - span: - start: 106 - end: 109 - value: - Constant: - Identifier: bad - args: [] - typed_catches: [] - catch_all: - name: - span: - start: 127 - end: 128 - value: e - body: - - Expr: - span: - start: 140 - end: 161 - value: - Trace: - span: - start: 146 - end: 160 + Function: + signature: + name: ~ + args: [] + return_type: ~ + body: + - Try: + try_body: + - Return: + - span: + start: 97 + end: 112 + value: + BinaryOperator: + - Add + - span: + start: 97 + end: 98 + value: + Constant: + Integer: 1 + - span: + start: 102 + end: 111 value: BinaryOperator: - Add - span: - start: 146 - end: 156 + start: 102 + end: 103 value: Constant: - String: "caught: " + Integer: 1 - span: - start: 159 - end: 160 + start: 106 + end: 111 value: - Constant: - Identifier: e - - Return: - - span: - start: 178 - end: 179 + Call: + name: + span: + start: 106 + end: 109 + value: + Constant: + Identifier: bad + args: [] + typed_catches: [] + catch_all: + name: + span: + start: 127 + end: 128 + value: e + body: + - Expr: + span: + start: 140 + end: 161 + value: + Trace: + span: + start: 146 + end: 160 value: - Constant: - Integer: 5 - finally: [] - type_name: ~ + BinaryOperator: + - Add + - span: + start: 146 + end: 156 + value: + Constant: + String: "caught: " + - span: + start: 159 + end: 160 + value: + Constant: + Identifier: e + - Return: + - span: + start: 178 + end: 179 + value: + Constant: + Integer: 5 + finally: [] + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: + - bad + - e + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + type_name: ~ - Expr: span: start: 191 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typed_variables.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typed_variables.as.snap index 222f629..77c2033 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typed_variables.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typed_variables.as.snap @@ -6,93 +6,93 @@ input_file: samples/as2/typed_variables.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 7 - value: num + name: + span: + start: 4 + end: 7 + value: num + value: + span: + start: 17 + end: 19 value: - span: - start: 17 - end: 19 - value: - Constant: - Integer: 42 - type_name: - span: - start: 8 - end: 14 - value: Number + Constant: + Integer: 42 + type_name: + span: + start: 8 + end: 14 + value: Number - Declare: - - name: - span: - start: 25 - end: 28 - value: str + name: + span: + start: 25 + end: 28 + value: str + value: + span: + start: 38 + end: 45 value: - span: - start: 38 - end: 45 - value: - Constant: - String: Hello - type_name: - span: - start: 29 - end: 35 - value: String + Constant: + String: Hello + type_name: + span: + start: 29 + end: 35 + value: String - Declare: - - name: - span: - start: 51 - end: 55 - value: flag + name: + span: + start: 51 + end: 55 + value: flag + value: + span: + start: 66 + end: 70 value: - span: - start: 66 - end: 70 - value: - Constant: - Boolean: true - type_name: - span: - start: 56 - end: 63 - value: Boolean + Constant: + Boolean: true + type_name: + span: + start: 56 + end: 63 + value: Boolean - Declare: - - name: - span: - start: 76 - end: 79 - value: obj + name: + span: + start: 76 + end: 79 + value: obj + value: + span: + start: 89 + end: 91 value: - span: - start: 89 - end: 91 - value: - InitObject: [] - type_name: - span: - start: 80 - end: 86 - value: Object + InitObject: [] + type_name: + span: + start: 80 + end: 86 + value: Object - Declare: - - name: - span: - start: 97 - end: 100 - value: arr + name: + span: + start: 97 + end: 100 + value: arr + value: + span: + start: 109 + end: 111 value: - span: - start: 109 - end: 111 - value: - InitArray: [] - type_name: - span: - start: 101 - end: 106 - value: Array + InitArray: [] + type_name: + span: + start: 101 + end: 106 + value: Array - Expr: span: start: 114 @@ -112,12 +112,14 @@ Ok: start: 129 end: 135 value: Number + register: 1 - name: b type_name: span: start: 139 end: 145 value: Number + register: 2 return_type: span: start: 147 @@ -136,13 +138,51 @@ Ok: end: 168 value: Constant: - Identifier: a + Register: 1 - span: start: 171 end: 172 value: Constant: - Identifier: b + Register: 2 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + a: + used: true + used_in_inner_scope: false + b: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 3 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 177 @@ -169,6 +209,38 @@ Ok: value: Constant: String: Test message + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 1 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Expr: span: start: 238 @@ -188,6 +260,7 @@ Ok: start: 264 end: 270 value: Object + register: 1 return_type: span: start: 272 @@ -205,131 +278,166 @@ Ok: end: 293 value: Constant: - Identifier: data + Register: 1 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + data: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Declare: - - name: - span: - start: 303 - end: 310 - value: numbers + name: + span: + start: 303 + end: 310 + value: numbers + value: + span: + start: 319 + end: 322 value: - span: - start: 319 - end: 322 - value: - New: - name: - span: - start: 323 - end: 328 - value: - Constant: - Identifier: Array - args: [] - type_name: - span: - start: 311 - end: 316 - value: Array + New: + name: + span: + start: 323 + end: 328 + value: + Constant: + Identifier: Array + args: [] + type_name: + span: + start: 311 + end: 316 + value: Array - Declare: - - name: - span: - start: 336 - end: 343 - value: strings + name: + span: + start: 336 + end: 343 + value: strings + value: + span: + start: 352 + end: 375 value: - span: - start: 352 - end: 375 - value: - InitArray: - - span: - start: 353 - end: 358 - value: - Constant: - String: one - - span: - start: 360 - end: 365 - value: - Constant: - String: two - - span: - start: 367 - end: 374 - value: - Constant: - String: three - type_name: - span: - start: 344 - end: 349 - value: Array + InitArray: + - span: + start: 353 + end: 358 + value: + Constant: + String: one + - span: + start: 360 + end: 365 + value: + Constant: + String: two + - span: + start: 367 + end: 374 + value: + Constant: + String: three + type_name: + span: + start: 344 + end: 349 + value: Array - Declare: - - name: - span: - start: 382 - end: 391 - value: someValue + name: + span: + start: 382 + end: 391 + value: someValue + value: + span: + start: 401 + end: 406 value: - span: - start: 401 - end: 406 - value: - Constant: - String: "123" - type_name: - span: - start: 392 - end: 398 - value: Object + Constant: + String: "123" + type_name: + span: + start: 392 + end: 398 + value: Object - Declare: - - name: - span: - start: 412 - end: 420 - value: numValue + name: + span: + start: 412 + end: 420 + value: numValue + value: + span: + start: 430 + end: 447 value: - span: - start: 430 - end: 447 - value: - CastToNumber: - span: - start: 437 - end: 446 - value: - Constant: - Identifier: someValue - type_name: - span: - start: 421 - end: 427 - value: Number + CastToNumber: + span: + start: 437 + end: 446 + value: + Constant: + Identifier: someValue + type_name: + span: + start: 421 + end: 427 + value: Number - Declare: - - name: - span: - start: 453 - end: 461 - value: strValue + name: + span: + start: 453 + end: 461 + value: strValue + value: + span: + start: 471 + end: 481 value: - span: - start: 471 - end: 481 - value: - CastToString: - span: - start: 478 - end: 480 - value: - Constant: - Integer: 42 - type_name: - span: - start: 462 - end: 468 - value: String + CastToString: + span: + start: 478 + end: 480 + value: + Constant: + Integer: 42 + type_name: + span: + start: 462 + end: 468 + value: String - Expr: span: start: 484 @@ -349,18 +457,21 @@ Ok: start: 510 end: 516 value: String + register: 1 - name: age type_name: span: start: 522 end: 528 value: Number + register: 2 - name: isValid type_name: span: start: 538 end: 545 value: Boolean + register: 3 return_type: span: start: 547 @@ -379,112 +490,153 @@ Ok: end: 578 value: Constant: - Identifier: name + Register: 1 - - age - span: start: 585 end: 588 value: Constant: - Identifier: age + Register: 2 - - valid - span: start: 597 end: 604 value: Constant: - Identifier: isValid + Register: 3 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + name: + used: true + used_in_inner_scope: false + age: + used: true + used_in_inner_scope: false + isValid: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Declare: - - name: - span: - start: 614 - end: 622 - value: userData + name: + span: + start: 614 + end: 622 + value: userData + value: + span: + start: 632 + end: 709 value: - span: - start: 632 - end: 709 - value: - InitObject: - - - id - - span: - start: 641 - end: 651 - value: - BinaryOperator: - - Assign - - span: - start: 641 - end: 647 - value: - Constant: - Identifier: Number - - span: - start: 650 - end: 651 - value: - Constant: - Integer: 1 - - - name - - span: - start: 662 - end: 677 - value: - BinaryOperator: - - Assign - - span: - start: 662 - end: 668 - value: - Constant: - Identifier: String - - span: - start: 671 - end: 677 - value: - Constant: - String: User - - - scores - - span: - start: 690 - end: 707 - value: - BinaryOperator: - - Assign - - span: - start: 690 - end: 695 - value: - Constant: - Identifier: Array - - span: - start: 698 - end: 707 - value: - InitArray: - - span: - start: 699 - end: 700 - value: - Constant: - Integer: 1 - - span: - start: 702 - end: 703 - value: - Constant: - Integer: 2 - - span: - start: 705 - end: 706 - value: - Constant: - Integer: 3 - type_name: - span: - start: 623 - end: 629 - value: Object + InitObject: + - - id + - span: + start: 641 + end: 651 + value: + BinaryOperator: + - Assign + - span: + start: 641 + end: 647 + value: + Constant: + Identifier: Number + - span: + start: 650 + end: 651 + value: + Constant: + Integer: 1 + - - name + - span: + start: 662 + end: 677 + value: + BinaryOperator: + - Assign + - span: + start: 662 + end: 668 + value: + Constant: + Identifier: String + - span: + start: 671 + end: 677 + value: + Constant: + String: User + - - scores + - span: + start: 690 + end: 707 + value: + BinaryOperator: + - Assign + - span: + start: 690 + end: 695 + value: + Constant: + Identifier: Array + - span: + start: 698 + end: 707 + value: + InitArray: + - span: + start: 699 + end: 700 + value: + Constant: + Integer: 1 + - span: + start: 702 + end: 703 + value: + Constant: + Integer: 2 + - span: + start: 705 + end: 706 + value: + Constant: + Integer: 3 + type_name: + span: + start: 623 + end: 629 + value: Object - Expr: span: start: 712 @@ -504,12 +656,14 @@ Ok: start: 733 end: 738 value: Array + register: 1 - name: callback type_name: span: start: 749 end: 757 value: Function + register: 2 return_type: span: start: 759 @@ -520,24 +674,25 @@ Ok: condition: Classic: initialize: - Declare: - - name: - span: - start: 779 - end: 780 - value: i - value: - span: - start: 790 - end: 791 - value: - Constant: - Integer: 0 - type_name: - span: - start: 781 - end: 787 - value: Number + Expr: + span: + start: 0 + end: 0 + value: + BinaryOperator: + - Assign + - span: + start: 0 + end: 0 + value: + Constant: + Register: 3 + - span: + start: 790 + end: 791 + value: + Constant: + Integer: 0 condition: - span: start: 793 @@ -550,7 +705,7 @@ Ok: end: 794 value: Constant: - Identifier: i + Register: 3 - span: start: 800 end: 807 @@ -561,7 +716,7 @@ Ok: end: 800 value: Constant: - Identifier: arr + Register: 1 - span: start: 801 end: 807 @@ -580,7 +735,7 @@ Ok: end: 810 value: Constant: - Identifier: i + Register: 3 body: Block: - Expr: @@ -595,7 +750,7 @@ Ok: end: 832 value: Constant: - Identifier: callback + Register: 2 args: - span: start: 836 @@ -607,13 +762,54 @@ Ok: end: 836 value: Constant: - Identifier: arr + Register: 1 - span: start: 837 end: 838 value: Constant: - Identifier: i + Register: 3 + scope: + defined_variables: + this: + used: false + used_in_inner_scope: false + arguments: + used: false + used_in_inner_scope: false + super: + used: false + used_in_inner_scope: false + _root: + used: false + used_in_inner_scope: false + _parent: + used: false + used_in_inner_scope: false + _global: + used: false + used_in_inner_scope: false + arr: + used: true + used_in_inner_scope: false + callback: + used: true + used_in_inner_scope: false + i: + used: true + used_in_inner_scope: false + referenced_variables: [] + could_reference_anything: false + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false interfaces: [] classes: [] custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typeof.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typeof.as.snap index 104feeb..367f7e1 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typeof.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@typeof.as.snap @@ -6,46 +6,46 @@ input_file: samples/as2/typeof.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 7 - value: num + name: + span: + start: 4 + end: 7 + value: num + value: + span: + start: 10 + end: 11 value: - span: - start: 10 - end: 11 - value: - Constant: - Integer: 1 - type_name: ~ + Constant: + Integer: 1 + type_name: ~ - Declare: - - name: - span: - start: 17 - end: 20 - value: obj + name: + span: + start: 17 + end: 20 + value: obj + value: + span: + start: 23 + end: 45 value: - span: - start: 23 - end: 45 - value: - InitObject: - - - num - - span: - start: 29 - end: 30 - value: - Constant: - Integer: 1 - - - trace - - span: - start: 39 - end: 44 - value: - Constant: - Identifier: trace - type_name: ~ + InitObject: + - - num + - span: + start: 29 + end: 30 + value: + Constant: + Integer: 1 + - - trace + - span: + start: 39 + end: 44 + value: + Constant: + Identifier: trace + type_name: ~ - Expr: span: start: 47 diff --git a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@while.as.snap b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@while.as.snap index 2754745..37d46d3 100644 --- a/crates/rascal/src/snapshots/rascal__program__tests__all_samples@while.as.snap +++ b/crates/rascal/src/snapshots/rascal__program__tests__all_samples@while.as.snap @@ -6,19 +6,19 @@ input_file: samples/as2/while.as Ok: initial_script: - Declare: - - name: - span: - start: 4 - end: 5 - value: x + name: + span: + start: 4 + end: 5 + value: x + value: + span: + start: 8 + end: 9 value: - span: - start: 8 - end: 9 - value: - Constant: - Integer: 0 - type_name: ~ + Constant: + Integer: 0 + type_name: ~ - While: condition: span: diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@function.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@function.as.snap index 3e36281..79fa960 100644 --- a/crates/rascal/src/snapshots/rascal__tests__all_samples@function.as.snap +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@function.as.snap @@ -11,9 +11,7 @@ initializer: - anon - Anonymous function called! - "a = " - - a - ", b = " - - b - bb - aa - test @@ -31,11 +29,13 @@ initializer: label_positions: {} - Push: - Constant: 2 - - DefineFunction: + - DefineFunction2: name: "" params: - - a - - b + - name: a + register: 1 + - name: b + register: 2 actions: actions: - Push: @@ -43,33 +43,41 @@ initializer: - Trace - Push: - Constant: 4 - - Constant: 5 - - GetVariable + - Register: 1 - Add2 - Push: - - Constant: 6 + - Constant: 5 - Add2 - Push: - - Constant: 7 - - GetVariable + - Register: 2 - Add2 - Trace label_positions: {} + register_count: 3 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - DefineLocal - Push: - - Constant: 8 - - Constant: 9 + - Constant: 6 + - Constant: 7 - Integer: 2 - Constant: 2 - CallFunction - Pop - Push: - Integer: 0 - - Constant: 10 + - Constant: 8 - CallFunction - Push: - Integer: 0 - - Constant: 10 + - Constant: 8 - CallFunction - Add2 - Trace diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@function_in_loop_break_continue.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@function_in_loop_break_continue.as.snap index 132639a..e25c595 100644 --- a/crates/rascal/src/snapshots/rascal__tests__all_samples@function_in_loop_break_continue.as.snap +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@function_in_loop_break_continue.as.snap @@ -9,7 +9,6 @@ initializer: - i - loop i= - decide - - v - continue - break - none @@ -37,43 +36,50 @@ initializer: - Trace - Push: - Constant: 2 - - DefineFunction: + - DefineFunction2: name: "" params: - - v + - name: v + register: 1 actions: actions: - Push: - - Constant: 3 - - GetVariable - - Push: + - Register: 1 - Integer: 1 - Equals2 - Not - If: loc0003 - - Push: - - Constant: 4 - - Return - Push: - Constant: 3 - - GetVariable + - Return - Push: + - Register: 1 - Integer: 3 - Equals2 - Not - If: loc0004 - Push: - - Constant: 5 + - Constant: 4 - Return - Push: - - Constant: 6 + - Constant: 5 - Return label_positions: - loc0003: 8 - loc0004: 16 + loc0003: 6 + loc0004: 12 + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - DefineLocal - Push: - - Constant: 7 + - Constant: 6 - DefineFunction: name: "" params: [] @@ -83,11 +89,11 @@ initializer: - DefineLocal - Push: - Integer: 0 - - Constant: 7 + - Constant: 6 - CallFunction - Pop - Push: - - Constant: 8 + - Constant: 7 - Constant: 0 - GetVariable - Push: @@ -96,25 +102,25 @@ initializer: - CallFunction - DefineLocal - Push: - - Constant: 8 + - Constant: 7 - GetVariable - Push: - - Constant: 4 + - Constant: 3 - Equals2 - Not - If: loc0005 - Jump: loc0001 - Push: - - Constant: 8 + - Constant: 7 - GetVariable - Push: - - Constant: 5 + - Constant: 4 - Equals2 - Not - If: loc0006 - Jump: loc0000 - Push: - - Constant: 9 + - Constant: 8 - Constant: 0 - GetVariable - Add2 @@ -127,7 +133,7 @@ initializer: - SetVariable - Jump: loc0002 - Push: - - Constant: 10 + - Constant: 9 - Trace label_positions: loc0002: 3 diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@op_precedence__inc_dec.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@op_precedence__inc_dec.as.snap index 6160b79..8c083f2 100644 --- a/crates/rascal/src/snapshots/rascal__tests__all_samples@op_precedence__inc_dec.as.snap +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@op_precedence__inc_dec.as.snap @@ -8,24 +8,33 @@ initializer: - ConstantPool: - a - trc - - msg - Push: - Constant: 0 - Integer: 10 - DefineLocal - Push: - Constant: 1 - - DefineFunction: + - DefineFunction2: name: "" params: - - msg + - name: msg + register: 1 actions: actions: - Push: - - Constant: 2 - - GetVariable + - Register: 1 - Trace label_positions: {} + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - DefineLocal - Push: - Constant: 0 diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@registers.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@registers.as.snap new file mode 100644 index 0000000..e85e200 --- /dev/null +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@registers.as.snap @@ -0,0 +1,143 @@ +--- +source: crates/rascal/src/tests.rs +expression: result +input_file: samples/as2/registers.as +--- +initializer: + actions: + - ConstantPool: + - this + - arguments + - super + - _root + - _parent + - _global + - a + - "" + - c + - DefineFunction2: + name: "" + params: + - name: a + register: 7 + - name: b + register: 0 + actions: + actions: + - Push: + - Register: 1 + - Trace + - Push: + - Register: 2 + - Trace + - Push: + - Register: 3 + - Trace + - Push: + - Register: 4 + - Trace + - Push: + - Register: 5 + - Trace + - Push: + - Register: 6 + - Trace + - Push: + - Register: 7 + - Trace + label_positions: {} + register_count: 8 + preload_this: true + suppress_this: false + preload_arguments: true + suppress_arguments: false + preload_super: true + suppress_super: false + preload_root: true + preload_parent: true + preload_global: true + - Pop + - DefineFunction: + name: "" + params: + - a + - b + actions: + actions: + - Push: + - Constant: 0 + - GetVariable + - Trace + - Push: + - Constant: 1 + - GetVariable + - Trace + - Push: + - Constant: 2 + - GetVariable + - Trace + - Push: + - Constant: 3 + - GetVariable + - Trace + - Push: + - Constant: 4 + - GetVariable + - Trace + - Push: + - Constant: 5 + - GetVariable + - Trace + - Push: + - Constant: 6 + - GetVariable + - Trace + - Push: + - Constant: 7 + - GetVariable + - Pop + label_positions: {} + - Pop + - DefineFunction2: + name: "" + params: + - name: a + register: 0 + - name: b + register: 0 + actions: + actions: [] + label_positions: {} + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction: + name: "" + params: + - a + - b + actions: + actions: + - Push: + - Constant: 8 + - Integer: 2 + - DefineLocal + - Push: + - Constant: 7 + - GetVariable + - Pop + label_positions: {} + - Pop + label_positions: {} +extra_modules: [] +compile_options: + swf_version: 15 +custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap index 3e7fcc2..895443d 100644 --- a/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_edittext_drag_select.as.snap @@ -10,7 +10,6 @@ initializer: - Object - onMouseDown - "Mouse down: " - - _root - _xmouse - "," - _ymouse @@ -39,110 +38,122 @@ initializer: - GetVariable - Push: - Constant: 2 - - DefineFunction: + - DefineFunction2: name: "" params: [] actions: actions: - Push: - Constant: 3 + - Register: 1 - Constant: 4 - - GetVariable - - Push: - - Constant: 5 - GetMember - Add2 - Push: - - Constant: 6 + - Constant: 5 - Add2 - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 7 + - Register: 1 + - Constant: 6 - GetMember - Add2 - Trace label_positions: {} + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - SetMember - Push: - Constant: 0 - GetVariable - Push: - - Constant: 8 - - DefineFunction: + - Constant: 7 + - DefineFunction2: name: "" params: [] actions: actions: - Push: - - Constant: 9 + - Constant: 8 + - Register: 1 - Constant: 4 - - GetVariable - - Push: - - Constant: 5 - GetMember - Add2 - Push: - - Constant: 6 + - Constant: 5 - Add2 - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 7 + - Register: 1 + - Constant: 6 - GetMember - Add2 - Trace - Push: - - Constant: 10 + - Constant: 9 - Integer: 1 - - Constant: 11 + - Constant: 10 - GetVariable - Push: - - Constant: 12 + - Constant: 11 - CallMethod - Pop - Push: + - Constant: 12 - Constant: 13 - - Constant: 14 - - Integer: 1 - - Constant: 15 - Integer: 1 - Constant: 14 - Integer: 1 - - Constant: 16 + - Constant: 13 - Integer: 1 - - Constant: 11 + - Constant: 15 + - Integer: 1 + - Constant: 10 - GetVariable - Push: - - Constant: 11 + - Constant: 10 - GetMember - Push: - - Constant: 17 + - Constant: 16 - CallMethod - Push: - - Constant: 18 + - Constant: 17 - CallMethod - Push: - - Constant: 17 + - Constant: 16 - CallMethod - Push: - - Constant: 18 + - Constant: 17 - CallMethod - Add2 - Trace label_positions: {} + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - SetMember - Push: - Constant: 0 - GetVariable - Push: - Integer: 1 - - Constant: 19 + - Constant: 18 - GetVariable - Push: - - Constant: 20 + - Constant: 19 - CallMethod - Pop - Push: @@ -150,10 +161,10 @@ initializer: - GetVariable - Push: - Integer: 1 - - Constant: 21 + - Constant: 20 - GetVariable - Push: - - Constant: 20 + - Constant: 19 - CallMethod - Pop label_positions: {} diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap index 4cedcaa..1407926 100644 --- a/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_mouse_pos.as.snap @@ -11,7 +11,6 @@ initializer: - oldY - _root - " " - - clips - s133fpr15 - s133fp - s42fp @@ -19,16 +18,14 @@ initializer: - ip - zs - id - - i - length - - clip - _name - _xmouse - _ymouse - dump - _xscale - _yscale - - DefineFunction: + - DefineFunction2: name: dump params: [] actions: @@ -90,6 +87,8 @@ initializer: - Trace - Push: - Constant: 5 + - GetVariable + - Push: - Constant: 6 - GetVariable - Push: @@ -107,71 +106,55 @@ initializer: - Push: - Constant: 11 - GetVariable - - Push: - - Constant: 12 - - GetVariable - Push: - Integer: 7 - InitArray - - DefineLocal + - StoreRegister: 1 + - Pop - Push: - - Constant: 13 - Integer: 0 - - DefineLocal - - Push: - - Constant: 13 - - GetVariable - - Push: - - Constant: 5 - - GetVariable + - StoreRegister: 2 + - Pop - Push: - - Constant: 14 + - Register: 2 + - Register: 1 + - Constant: 12 - GetMember - Less2 - Not - If: loc0002 - Push: - - Constant: 15 - - Constant: 5 - - GetVariable - - Push: - - Constant: 13 - - GetVariable + - Register: 1 + - Register: 2 - GetMember - - DefineLocal - - Push: - - Constant: 15 - - GetVariable + - StoreRegister: 3 + - Pop - Push: - - Constant: 16 + - Register: 3 + - Constant: 13 - GetMember - Push: - Constant: 4 - Add2 - Push: - - Constant: 15 - - GetVariable - - Push: - - Constant: 17 + - Register: 3 + - Constant: 14 - GetMember - Add2 - Push: - Constant: 4 - Add2 - Push: + - Register: 3 - Constant: 15 - - GetVariable - - Push: - - Constant: 18 - GetMember - Add2 - Trace - Push: - - Constant: 13 - - Constant: 13 - - GetVariable + - Register: 2 - Increment - - SetVariable + - StoreRegister: 2 + - Pop - Jump: loc0004 - Push: - Constant: 0 @@ -179,9 +162,19 @@ initializer: label_positions: loc0001: 14 loc0000: 18 - loc0004: 54 - loc0003: 88 - loc0002: 93 + loc0004: 56 + loc0003: 78 + loc0002: 83 + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - DefineFunction: name: onEnterFrame params: [] @@ -189,19 +182,19 @@ initializer: actions: - Push: - Integer: 0 - - Constant: 19 + - Constant: 16 - CallFunction - Pop label_positions: {} - Push: - - Constant: 11 + - Constant: 10 - GetVariable - Push: - - Constant: 20 - - Constant: 11 + - Constant: 17 + - Constant: 10 - GetVariable - Push: - - Constant: 21 + - Constant: 18 - Integer: 0 - StoreRegister: 0 - SetMember diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap index 3eabe69..62a27ac 100644 --- a/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@regressions__ruffle_avm1_movieclip_lockroot.as.snap @@ -6,11 +6,8 @@ input_file: samples/as2/regressions/ruffle_avm1_movieclip_lockroot.as initializer: actions: - ConstantPool: - - valueLabel - - value - string - "\"" - - this - _lockroot - "Parent: setting _lockroot to " - " sets it to true." @@ -18,7 +15,6 @@ initializer: - " has no effect." - "Parent: level is " - ", root is " - - _root - ", _lockroot is " - testSet - "NaN" @@ -42,246 +38,229 @@ initializer: - All tests done. - testSelf - testChildren - - DefineFunction: + - DefineFunction2: name: testSet params: - - value + - name: value + register: 2 actions: actions: - Push: - - Constant: 0 - - Constant: 1 - - GetVariable + - Register: 2 - TypeOf - Push: - - Constant: 2 + - Constant: 0 - Equals2 - Not - If: loc0001 - Push: - - Constant: 3 - Constant: 1 - - GetVariable + - Register: 2 - Add2 - Push: - - Constant: 3 + - Constant: 1 - Add2 - Jump: loc0000 - Push: - - Constant: 1 - - GetVariable - - DefineLocal - - Push: - - Constant: 4 - - GetVariable + - Register: 2 + - StoreRegister: 3 + - Pop - Push: - - Constant: 5 + - Register: 1 + - Constant: 2 - "False" - SetMember - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 - - Constant: 1 - - GetVariable + - Register: 1 + - Constant: 2 + - Register: 2 - SetMember - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 + - Register: 1 + - Constant: 2 - GetMember - Not - If: loc0002 - Push: - - Constant: 6 - - Constant: 0 - - GetVariable + - Constant: 3 + - Register: 3 - Add2 - Push: - - Constant: 7 + - Constant: 4 - Add2 - Trace - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 + - Register: 1 + - Constant: 2 - "False" - SetMember - Push: - Undefined - Return - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 + - Register: 1 + - Constant: 2 - "True" - SetMember - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 - - Constant: 1 - - GetVariable + - Register: 1 + - Constant: 2 + - Register: 2 - SetMember - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 + - Register: 1 + - Constant: 2 - GetMember - Not - Not - If: loc0003 - Push: - - Constant: 6 - - Constant: 0 - - GetVariable + - Constant: 3 + - Register: 3 - Add2 - Push: - - Constant: 8 + - Constant: 5 - Add2 - Trace - Push: - Undefined - Return - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 + - Register: 1 + - Constant: 2 - "False" - SetMember - Push: - - Constant: 6 - - Constant: 0 - - GetVariable + - Constant: 3 + - Register: 3 - Add2 - Push: - - Constant: 9 + - Constant: 6 - Add2 - Trace label_positions: - loc0001: 13 - loc0000: 15 - loc0002: 43 - loc0003: 67 - - DefineFunction: + loc0001: 11 + loc0000: 12 + loc0002: 31 + loc0003: 47 + register_count: 4 + preload_this: true + suppress_this: false + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - DefineFunction2: name: testSelf params: [] actions: actions: - Push: - - Constant: 10 - - Constant: 4 - - GetVariable + - Constant: 7 + - Register: 1 - Add2 - Push: - - Constant: 11 + - Constant: 8 - Add2 - Push: - - Constant: 12 - - GetVariable + - Register: 2 - Add2 - Push: - - Constant: 13 + - Constant: 9 - Add2 - Push: - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 + - Register: 1 + - Constant: 2 - GetMember - Add2 - Trace - Push: - "True" - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - "False" - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - Undefined - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - "Null" - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - - Constant: 15 + - Constant: 11 - GetVariable - Push: - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - Integer: -1 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - Integer: 0 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - Integer: 1 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - Integer: 1337 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - - Constant: 16 + - Constant: 12 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - - Constant: 17 + - Constant: 13 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - - Constant: 18 - - Integer: 1 - Constant: 14 + - Integer: 1 + - Constant: 10 - CallFunction - Pop - Push: - - Constant: 19 + - Constant: 15 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: - - Constant: 20 + - Constant: 16 - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop - Push: @@ -289,707 +268,663 @@ initializer: - InitObject - Push: - Integer: 1 - - Constant: 14 + - Constant: 10 - CallFunction - Pop label_positions: {} + register_count: 3 + preload_this: true + suppress_this: false + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - DefineFunction: name: testChildren params: [] actions: actions: - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 22 + - Constant: 18 - Integer: 2 - - Constant: 23 + - Constant: 19 - CallFunction - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 22 + - Constant: 18 - GetVariable - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 26 + - Constant: 22 - Integer: 2 - - Constant: 23 + - Constant: 19 - CallFunction - Pop - Push: - - Constant: 26 + - Constant: 22 - GetVariable - Push: - - Constant: 5 + - Constant: 2 - "True" - SetMember - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 26 + - Constant: 22 - GetVariable - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 27 - - Integer: 2 - Constant: 23 + - Integer: 2 + - Constant: 19 - CallFunction - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 27 + - Constant: 23 - GetVariable - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - Integer: 50 - - Constant: 28 + - Constant: 24 - GetVariable - Push: - Integer: 2 - - Constant: 29 + - Constant: 25 - CallFunction - Pop - Push: - Integer: 250 - - Constant: 30 + - Constant: 26 - GetVariable - Push: - Integer: 2 - - Constant: 29 + - Constant: 25 - CallFunction - Pop label_positions: {} - - DefineFunction: + - DefineFunction2: name: createGrandChildren params: [] actions: actions: - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 22 + - Constant: 18 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 22 + - Constant: 18 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - - Push: - - Constant: 26 - - Integer: 2 - - Constant: 12 - - GetVariable - Push: - Constant: 22 + - Integer: 2 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 5 + - Constant: 2 - "True" - SetMember - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 27 + - Constant: 23 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 22 + - Constant: 18 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 22 + - Constant: 18 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 26 + - Constant: 22 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 5 + - Constant: 2 - "True" - SetMember - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 27 + - Constant: 23 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 22 + - Constant: 18 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 22 + - Constant: 18 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 26 + - Constant: 22 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 5 + - Constant: 2 - "True" - SetMember - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop - Push: - - Constant: 21 + - Constant: 17 - GetVariable - Push: - - Constant: 21 - - Constant: 21 + - Constant: 17 + - Constant: 17 - GetVariable - Increment - SetVariable - Push: - - Constant: 27 + - Constant: 23 - Integer: 2 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 23 + - Constant: 19 - CallMethod - Pop - Push: - - Constant: 24 + - Constant: 20 - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 25 + - Constant: 21 - CallMethod - Pop label_positions: {} - - DefineFunction: + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false + - DefineFunction2: name: testAllChildren params: [] actions: actions: - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - "True" - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 32 + - Constant: 28 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 22 + - Constant: 18 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - "True" - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 32 + - Constant: 28 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 22 + - Register: 1 + - Constant: 18 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 22 + - Constant: 18 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - "True" - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 32 + - Constant: 28 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 26 + - Register: 1 + - Constant: 22 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 22 + - Constant: 18 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 26 + - Constant: 22 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - "True" - Integer: 1 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 32 + - Constant: 28 - CallMethod - Pop - Push: - Integer: 0 - - Constant: 12 - - GetVariable - - Push: - - Constant: 27 + - Register: 1 + - Constant: 23 - GetMember - Push: - - Constant: 27 + - Constant: 23 - GetMember - Push: - - Constant: 31 + - Constant: 27 - CallMethod - Pop - Push: - - Constant: 33 + - Constant: 29 - Trace label_positions: {} + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: true + preload_parent: false + preload_global: false - DefineFunction: name: test params: [] @@ -997,22 +932,22 @@ initializer: actions: - Push: - Integer: 0 - - Constant: 34 + - Constant: 30 - CallFunction - Pop - Push: - Integer: 0 - - Constant: 35 + - Constant: 31 - CallFunction - Pop label_positions: {} - Push: - - Constant: 21 + - Constant: 17 - Integer: 1 - DefineLocal - Push: - Integer: 0 - - Constant: 31 + - Constant: 27 - CallFunction - Pop label_positions: {} diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@scoping.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@scoping.as.snap new file mode 100644 index 0000000..b634918 --- /dev/null +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@scoping.as.snap @@ -0,0 +1,585 @@ +--- +source: crates/rascal/src/tests.rs +expression: result +input_file: samples/as2/scoping.as +--- +initializer: + actions: + - ConstantPool: + - outer_a + - outer_b + - outer_c + - inner_a + - inner_b + - a + - err + - try_a + - try_b + - finally_a + - finally_b + - inner + - x + - k + - _global + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + label_positions: {} + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Push: + - Constant: 5 + - Not + - If: loc0000 + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + label_positions: + loc0000: 18 + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Push: + - Constant: 5 + - Not + - Not + - If: loc0002 + - Jump: loc0001 + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + label_positions: + loc0002: 14 + loc0001: 20 + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Push: + - Integer: 0 + - StoreRegister: 4 + - Pop + - Push: + - Register: 4 + - Integer: 1 + - Less2 + - Not + - If: loc0003 + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + - Push: + - Register: 4 + - Increment + - StoreRegister: 4 + - Pop + - Jump: loc0005 + label_positions: + loc0005: 12 + loc0004: 22 + loc0003: 27 + register_count: 5 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Push: + - Integer: 0 + - StoreRegister: 4 + - Pop + - Push: + - Register: 4 + - Register: 4 + - Increment + - StoreRegister: 4 + - Pop + - Push: + - Integer: 1 + - Less2 + - Not + - If: loc0007 + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + - Jump: loc0006 + label_positions: + loc0006: 12 + loc0007: 27 + register_count: 5 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Push: + - Integer: 1 + - StoreRegister: 0 + - Push: + - Integer: 1 + - StrictEquals + - If: loc0009 + - Jump: loc0008 + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + - Jump: loc0008 + label_positions: + loc0009: 15 + loc0008: 22 + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Try: + try_body: + actions: + - Push: + - Constant: 6 + - Throw + - Jump: loc000a + label_positions: {} + catch_body: + - Variable: e + - actions: + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + label_positions: {} + finally_body: ~ + label_positions: + loc000a: 10 + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Try: + try_body: + actions: + - Push: + - Constant: 7 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 8 + - StoreRegister: 2 + - Pop + - Jump: loc000b + label_positions: {} + catch_body: ~ + finally_body: + actions: + - Push: + - Constant: 9 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 10 + - StoreRegister: 2 + - Pop + label_positions: + loc000b: 0 + label_positions: {} + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - DefineFunction2: + name: inner + params: [] + actions: + actions: + - Push: + - Constant: 5 + - Constant: 3 + - SetVariable + - Push: + - Constant: 4 + - StoreRegister: 1 + - Pop + label_positions: {} + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Push: + - Constant: 5 + - Constant: 0 + - DefineLocal + - Push: + - Constant: 1 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 2 + - Pop + - Push: + - Integer: 0 + - Constant: 11 + - CallFunction + - Pop + label_positions: {} + register_count: 3 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction2: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 0 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 1 + - StoreRegister: 2 + - Pop + - Push: + - Constant: 2 + - StoreRegister: 3 + - Pop + - Push: + - Constant: 12 + - Integer: 1 + - Integer: 1 + - InitObject + - StoreRegister: 4 + - Pop + - Push: + - Register: 4 + - Enumerate2 + - StoreRegister: 0 + - Push: + - "Null" + - Equals2 + - If: loc000c + - Push: + - Constant: 13 + - Register: 0 + - DefineLocal + - Push: + - Constant: 3 + - StoreRegister: 1 + - Pop + - Push: + - Constant: 4 + - StoreRegister: 2 + - Pop + - Jump: loc000d + label_positions: + loc000d: 15 + loc000c: 28 + register_count: 5 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - Pop + - DefineFunction: + name: "" + params: [] + actions: + actions: + - DefineFunction: + name: inner + params: [] + actions: + actions: + - Push: + - Constant: 5 + - GetVariable + - GetVariable + - Trace + label_positions: {} + - Push: + - Constant: 5 + - Constant: 0 + - DefineLocal + - Push: + - Integer: 0 + - Constant: 11 + - CallFunction + - Pop + label_positions: {} + - Pop + - DefineFunction: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 5 + - Constant: 5 + - DefineLocal + - DefineFunction: + name: "" + params: [] + actions: + actions: + - Push: + - Constant: 14 + - GetVariable + - With: + actions: [] + label_positions: {} + label_positions: {} + - Pop + label_positions: {} + - Pop + label_positions: {} +extra_modules: [] +compile_options: + swf_version: 15 +custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@simplifier.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@simplifier.as.snap new file mode 100644 index 0000000..86223d8 --- /dev/null +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@simplifier.as.snap @@ -0,0 +1,19 @@ +--- +source: crates/rascal/src/tests.rs +expression: result +input_file: samples/as2/simplifier.as +--- +initializer: + actions: + - ConstantPool: [] + - Push: + - "False" + - Trace + - Push: + - "True" + - Trace + label_positions: {} +extra_modules: [] +compile_options: + swf_version: 15 +custom_pcodes: [] diff --git a/crates/rascal/src/snapshots/rascal__tests__all_samples@typed_variables.as.snap b/crates/rascal/src/snapshots/rascal__tests__all_samples@typed_variables.as.snap index 3880648..f8997f2 100644 --- a/crates/rascal/src/snapshots/rascal__tests__all_samples@typed_variables.as.snap +++ b/crates/rascal/src/snapshots/rascal__tests__all_samples@typed_variables.as.snap @@ -6,23 +6,17 @@ input_file: samples/as2/typed_variables.as initializer: actions: - ConstantPool: - - a - - b - Test message - - data - name - age - valid - - isValid - - i - - arr - length - - callback - num - str - Hello - flag - obj + - arr - numbers - Array - strings @@ -39,182 +33,213 @@ initializer: - String - User - scores - - DefineFunction: + - DefineFunction2: name: add params: - - a - - b + - name: a + register: 1 + - name: b + register: 2 actions: actions: - Push: - - Constant: 0 - - GetVariable - - Push: - - Constant: 1 - - GetVariable + - Register: 1 + - Register: 2 - Add2 - Return label_positions: {} + register_count: 3 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - DefineFunction: name: getMessage params: [] actions: actions: - Push: - - Constant: 2 + - Constant: 0 - Return label_positions: {} - - DefineFunction: + - DefineFunction2: name: processData params: - - data + - name: data + register: 1 actions: actions: - Push: - - Constant: 3 - - GetVariable + - Register: 1 - Trace label_positions: {} - - DefineFunction: + register_count: 2 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - DefineFunction2: name: complexFunc params: - - name - - age - - isValid + - name: name + register: 1 + - name: age + register: 2 + - name: isValid + register: 3 actions: actions: - Push: - - Constant: 4 - - Constant: 4 - - GetVariable - - Push: - - Constant: 5 - - Constant: 5 - - GetVariable - - Push: - - Constant: 6 - - Constant: 7 - - GetVariable - - Push: + - Constant: 1 + - Register: 1 + - Constant: 2 + - Register: 2 + - Constant: 3 + - Register: 3 - Integer: 3 - InitObject - Return label_positions: {} - - DefineFunction: + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false + - DefineFunction2: name: forEach params: - - arr - - callback + - name: arr + register: 1 + - name: callback + register: 2 actions: actions: - Push: - - Constant: 8 - Integer: 0 - - DefineLocal - - Push: - - Constant: 8 - - GetVariable - - Push: - - Constant: 9 - - GetVariable + - StoreRegister: 3 + - Pop - Push: - - Constant: 10 + - Register: 3 + - Register: 1 + - Constant: 4 - GetMember - Less2 - Not - If: loc0000 - Push: - - Constant: 9 - - GetVariable - - Push: - - Constant: 8 - - GetVariable + - Register: 1 + - Register: 3 - GetMember - Push: - Integer: 1 - - Constant: 11 - - CallFunction + - Register: 2 + - Undefined + - CallMethod - Pop - Push: - - Constant: 8 - - Constant: 8 - - GetVariable + - Register: 3 - Increment - - SetVariable + - StoreRegister: 3 + - Pop - Jump: loc0002 label_positions: - loc0002: 2 - loc0001: 19 - loc0000: 24 + loc0002: 3 + loc0001: 13 + loc0000: 18 + register_count: 4 + preload_this: false + suppress_this: true + preload_arguments: false + suppress_arguments: true + preload_super: false + suppress_super: true + preload_root: false + preload_parent: false + preload_global: false - Push: - - Constant: 12 + - Constant: 5 - Integer: 42 - DefineLocal - Push: - - Constant: 13 - - Constant: 14 + - Constant: 6 + - Constant: 7 - DefineLocal - Push: - - Constant: 15 + - Constant: 8 - "True" - DefineLocal - Push: - - Constant: 16 + - Constant: 9 - Integer: 0 - InitObject - DefineLocal - Push: - - Constant: 9 + - Constant: 10 - Integer: 0 - InitArray - DefineLocal - Push: - - Constant: 17 + - Constant: 11 - Integer: 0 - - Constant: 18 + - Constant: 12 - NewObject - DefineLocal - Push: - - Constant: 19 - - Constant: 20 - - Constant: 21 - - Constant: 22 + - Constant: 13 + - Constant: 14 + - Constant: 15 + - Constant: 16 - Integer: 3 - InitArray - DefineLocal - Push: - - Constant: 23 - - Constant: 24 + - Constant: 17 + - Constant: 18 - DefineLocal - Push: - - Constant: 25 - - Constant: 23 + - Constant: 19 + - Constant: 17 - GetVariable - ToNumber - DefineLocal - Push: - - Constant: 26 + - Constant: 20 - Integer: 42 - ToString - DefineLocal - Push: - - Constant: 27 - - Constant: 28 - - Constant: 29 + - Constant: 21 + - Constant: 22 + - Constant: 23 - Integer: 1 - StoreRegister: 0 - SetVariable - Push: - Register: 0 - - Constant: 4 - - Constant: 30 - - Constant: 31 + - Constant: 1 + - Constant: 24 + - Constant: 25 - StoreRegister: 0 - SetVariable - Push: - Register: 0 - - Constant: 32 - - Constant: 18 + - Constant: 26 + - Constant: 12 - Integer: 3 - Integer: 2 - Integer: 1 diff --git a/crates/rascal/src/swf.rs b/crates/rascal/src/swf.rs index c668936..f57bf95 100644 --- a/crates/rascal/src/swf.rs +++ b/crates/rascal/src/swf.rs @@ -1,4 +1,4 @@ -use crate::internal::as2_pcode::{Action, Actions, CatchTarget, PushValue}; +use crate::internal::as2_pcode::{Action, Actions, CatchTarget, FunctionParam, PushValue}; use crate::program::{CompiledProgram, SwfOptions}; use byteorder::{LittleEndian, WriteBytesExt}; use indexmap::IndexMap; @@ -225,7 +225,35 @@ impl<'a> ActionEncoder<'a> { params, actions, } => self.write_define_function(name, params, actions), - // Action::DefineFunction2(action) => self.write_define_function_2(action), + Action::DefineFunction2 { + name, + params, + actions, + register_count, + preload_this, + suppress_this, + preload_arguments, + suppress_arguments, + preload_super, + suppress_super, + preload_root, + preload_parent, + preload_global, + } => self.write_define_function_2( + name, + params, + actions, + *register_count, + *preload_this, + *suppress_this, + *preload_arguments, + *suppress_arguments, + *preload_super, + *suppress_super, + *preload_root, + *preload_parent, + *preload_global, + ), Action::DefineLocal => self.write_small_action(OpCode::DefineLocal), Action::DefineLocal2 => self.write_small_action(OpCode::DefineLocal2), Action::Divide => self.write_small_action(OpCode::Divide), @@ -401,6 +429,72 @@ impl<'a> ActionEncoder<'a> { Ok(()) } + #[expect(clippy::too_many_arguments)] + fn write_define_function_2( + &mut self, + name: &str, + params: &'a [FunctionParam], + actions: &'a Actions, + register_count: u8, + preload_this: bool, + suppress_this: bool, + preload_arguments: bool, + suppress_arguments: bool, + preload_super: bool, + suppress_super: bool, + preload_root: bool, + preload_parent: bool, + preload_global: bool, + ) -> Result<()> { + let len = name.len() + 1 + 3 + params.iter().map(|p| p.name.len() + 2).sum::() + 4; + self.write_action_header(OpCode::DefineFunction2, len)?; + self.write_string(SwfStr::from_utf8_str(name))?; + self.write_u16(params.len() as u16)?; + self.write_u8(register_count)?; + let mut flags = 0; + if preload_this { + flags |= 1 << 0; + } + if suppress_this { + flags |= 1 << 1; + } + if preload_arguments { + flags |= 1 << 2; + } + if suppress_arguments { + flags |= 1 << 3; + } + if preload_super { + flags |= 1 << 4; + } + if suppress_super { + flags |= 1 << 5; + } + if preload_root { + flags |= 1 << 6; + } + if preload_parent { + flags |= 1 << 7; + } + if preload_global { + flags |= 1 << 8; + } + self.write_u16(flags)?; + for param in params { + self.write_u8(param.register)?; + self.write_string(SwfStr::from_utf8_str(¶m.name))?; + } + let length_offset = self.output.len(); + self.write_u16(0)?; + let length_before_function = self.output.len(); + self.write_actions(actions)?; + let length_after_function = self.output.len(); + self.output[length_offset..length_offset + 2].copy_from_slice( + &((length_after_function - length_before_function) as u16).to_le_bytes(), + ); + Ok(()) + } + fn write_with(&mut self, actions: &'a Actions) -> Result<()> { self.write_action_header(OpCode::With, 2)?; let length_offset = self.output.len(); @@ -617,7 +711,6 @@ impl<'a> ActionEncoder<'a> { } #[derive(Clone, Copy, Debug, Eq, PartialEq)] -#[expect(dead_code)] pub enum OpCode { End = 0x00, diff --git a/output.swf b/output.swf deleted file mode 100644 index e5d76ab..0000000 Binary files a/output.swf and /dev/null differ diff --git a/samples/as2/registers.as b/samples/as2/registers.as new file mode 100644 index 0000000..3d1c383 --- /dev/null +++ b/samples/as2/registers.as @@ -0,0 +1,28 @@ +function(a, b) { + trace(this); + trace(arguments); + trace(super); + trace(_root); + trace(_parent); + trace(_global); + trace(a); +} +function(a, b) { + trace(this); + trace(arguments); + trace(super); + trace(_root); + trace(_parent); + trace(_global); + trace(a); + eval(""); // disable optimisations +} + +function(a, b) { + var c; +} + +function(a, b) { + var c = 2; + eval(""); // disable optimisations +} diff --git a/samples/as2/scoping.as b/samples/as2/scoping.as new file mode 100644 index 0000000..fc35079 --- /dev/null +++ b/samples/as2/scoping.as @@ -0,0 +1,127 @@ +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + { + a = "inner_a"; + var b = "inner_b"; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + if ("a") { + a = "inner_a"; + var b = "inner_b"; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + if (!"a") { + } else { + a = "inner_a"; + var b = "inner_b"; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + for (var i = 0; i < 1; i++) { + a = "inner_a"; + var b = "inner_b"; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + var i = 0; + while (i++ < 1) { + a = "inner_a"; + var b = "inner_b"; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + switch (1) { + case 1: + a = "inner_a"; + var b = "inner_b"; + break; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + try { + throw "err"; + } catch (e) { + a = "inner_a"; + var b = "inner_b"; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + try { + a = "try_a"; + var b = "try_b"; + } finally { + a = "finally_a"; + var b = "finally_b"; + } +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + function inner() { + a = "inner_a"; + var b = "inner_b"; + } + inner(); +} + +function() { + var a = "outer_a"; + var b = "outer_b"; + var c = "outer_c"; + var obj = { x: 1 }; + for (var k in obj) { + a = "inner_a"; + var b = "inner_b"; + } +} + +function() { + var a = "outer_a"; + function inner() { + // Any eval(), anywhere in nested scope, kills any optimisations of the parent scopes + trace(eval(a)); + } + inner(); +} + +function() { + var a = "a"; + // Any with(), anywhere in nested scope, kills any optimisations of the parent scopes + function() { + with(_global) {} + } +} diff --git a/samples/as2/simplifier.as b/samples/as2/simplifier.as new file mode 100644 index 0000000..9ca125e --- /dev/null +++ b/samples/as2/simplifier.as @@ -0,0 +1,2 @@ +trace(!true); +trace(!false); diff --git a/samples/as2_pcode/function.pcode b/samples/as2_pcode/function.pcode index 2261758..621da89 100644 --- a/samples/as2_pcode/function.pcode +++ b/samples/as2_pcode/function.pcode @@ -1,4 +1,4 @@ -ConstantPool "Test called!", ":)", "bb", "aa", "Anonymous function called!", "a = ", "a", ", b = ", "b", "test" +ConstantPool "Test called!", ":)", "anon", "Anonymous function called!", "a = ", ", b = ", "bb", "aa", "test" DefineFunction "test", 0 { Push constant0 Trace @@ -6,29 +6,27 @@ Push constant1 Return } Push constant2 +DefineFunction2 "", 2, 3, false, false, true, false, true, false, true, false, false, 2, "a", 1, "b" { Push constant3 -Push 2 -DefineFunction "", 2, "a" , "b" { -Push constant4 Trace -Push constant5 -Push constant6 -GetVariable +Push constant4, register2 Add2 -Push constant7 +Push constant5 Add2 -Push constant8 -GetVariable +Push register1 Add2 Trace } +DefineLocal +Push constant6, constant7, 2, constant2 CallFunction Pop -Push 0 -Push constant9 +Push 0, constant8 CallFunction -Push 0 -Push constant9 +Push 0, constant8 CallFunction Add2 Trace +DefineFunction "", 0 { +} +Pop