Skip to content

Commit

Permalink
ast simplification
Browse files Browse the repository at this point in the history
  • Loading branch information
MarioAriasC committed Dec 23, 2022
1 parent ddf22a8 commit bf6b676
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 26 deletions.
2 changes: 1 addition & 1 deletion shard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ targets:
monyet:
main: src/monyet.cr

crystal: 1.4.1
crystal: 1.6.2

license: MIT

Expand Down
2 changes: 1 addition & 1 deletion src/ast.cr
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ module Ast
end
end

class Program < Node
class Program
getter statements

def initialize(@statements : Array(Statement))
Expand Down
10 changes: 6 additions & 4 deletions src/compiler.cr
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,12 @@ module Compilers
end
end

def compile(node : Node)
def compile(program : Program)
program.statements.each {|statement| compile(statement)}
end

private def compile(node : Node)
case node
when Program
node.statements.each { |statement| compile(statement) }
when ExpressionStatement
compile(node.expression?.not_nil!)
emit(Opcode::OpPop)
Expand Down Expand Up @@ -323,5 +325,5 @@ module Compilers
end

class MCompilerException < Exception
end
end
end
32 changes: 13 additions & 19 deletions src/evaluator.cr
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,24 @@ module Evaluator
# end
end

def eval(program : Program, env : Environment)
eval_program(program.statements, env)
def eval(program : Program, env : Environment): MObject?
result : MObject? = nil
program.statements.each do |statement|
result = eval(statement, env)
case result
when MReturnValue
return result.value
when MError
return result
end
end
return result
end

def eval(node : Node?, env : Environment) : MObject?
private def eval(node : Node?, env : Environment) : MObject?
# pp node
# pp env
case node
when Program
return eval_program(node.statements, env)
when Identifier
eval_identifier(node, env)
when IntegerLiteral
Expand Down Expand Up @@ -144,20 +152,6 @@ module Evaluator
end
end

private def eval_program(statements : Array(Statement), env : Environment) : MObject?
result : MObject? = nil
statements.each do |statement|
result = eval(statement, env)
case result
when MReturnValue
return result.value
when MError
return result
end
end
return result
end

private def eval_prefix_expression(operator : String, right : MObject) : MObject?
case operator
when "!"
Expand Down
2 changes: 1 addition & 1 deletion tests.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/usr/bin/env bash
#crystal spec --verbose --define=slice
crystal spec --verbose
crystal spec --verbose --error-trace

0 comments on commit bf6b676

Please sign in to comment.