Commit graph

13 commits

Author SHA1 Message Date
Eric Swanson
a77ddd028e
New compiler: Add optimized unary expressions (#244)
Adds:
- UnaryOperator: AST node for unary operators -, ++, --, and so forth
- UnaryOperatorOptimizer: optimizes a unary operator with its operand
  - now integer and float negation, and integer inversion
  - later x[y]++ to a single instruction

Also:
- automatically include basic.em, which includes some parameter defaults like -1.

This allows the compiler to generate output for a hello, world script with the exact same .ecl output as the legacy compiler.
2020-08-26 19:24:47 -07:00
Eric Swanson
5e85fcc9e4
New compiler: Add IntegerValue (#243) 2020-08-25 23:27:24 -07:00
Eric Swanson
9bbc0518f8
Compiler rewrite: add global variables (#241)
Adds support for var statements at the global level.

Adds:
- analyzer/Variables: keeps track of the variables in scope (either local or global).
- ast/Identifier: AST node for an identifier.
  - The optimizer will replace constant identifiers with their constant value (in a later commit).
  - The semantic analyzer will set the variable field for local or global variable identifiers.
- ast/VarStatement: AST node for a var statement.
  - A single var statement will generate one VarStatement per variable declared.
- model/Variable: Describes a variable, including its index within its scope.
2020-08-25 00:57:03 -07:00
Eric Swanson
cf42b03e3c
New compiler: Add AST nodes for function calls. Can compile hello world. (#240)
Adds:
- ast/Argument: AST node for an argument passed to a function.
- ast/FunctionCall: AST node for a function call.
- codegen/ModuleDeclarationRegistrar: The code generator registers module function declarations with this in order to determine module indexes and function indexes for instructions.
- model/FunctionLink: this is a reference either:
  - from: a FunctionCall or a FunctionReference
  - to: a ModuleFunctionDeclaration or a UserFunction
- optimizer/ReferencedFunctionGatherer: a visitor that determines which module functions and user functions are referenced, by looking at function calls and function references.

Also:
- CodeGenerator registers module functions
- InstructionGenerator generates code for function calls
- InstructionEmitter generates TOK_FUNC instructions
- StoredTokenDecoder decodes TOK_FUNC instructions

After all of this, the compiler can compile print("hello, world");
2020-08-24 01:47:38 -07:00
Eric Swanson
47aeb634d6
New compiler: Add StringValue (#235)
* Add StringValue
2020-08-20 10:27:35 +02:00
Eric Swanson
81331b7200
Add FloatValue (#233) 2020-08-19 19:43:08 +02:00
Eric Swanson
f93573ae51
Add SourceFileProcessor, ValueConsumer (#232)
* Add astbuilder/ SourceFileProcessor

* Add ast/ ValueConsumer

Co-authored-by: Fernando Rozenblit <rozenblit@gmail.com>
2020-08-18 23:32:57 -07:00
Eric Swanson
841bc928d3
Normalize include paths (#221) 2020-08-15 08:01:19 +02:00
Eric Swanson
97f669f94a
Add instruction generator, emitter, emit progend (#211)
* Add codegen/InstructionEmitter

* Add codegen/InstructionGenerator

* CodeGenerator: emit progend

Checkpoint: compiler can compile an empty file

* Comment reason for having both emit and emitter.
2020-08-12 10:30:06 +02:00
Eric Swanson
978b9ff6ec
Add StoredTokenDecoder and ListingWriter stubs; write listfile (#208) 2020-08-11 12:49:18 +02:00
Eric Swanson
c0229ce872
Cleanup: vector byte, default dtor (#207)
* [[]] vector<uint8_t> -> vector<byte>

* Remove unnecessary explicit default destructor
2020-08-11 10:46:35 +02:00
Eric Swanson
435db9dc07
bscript/compiler: use c++17 nested namespace definitions (#202) 2020-08-10 12:20:29 +02:00
Eric Swanson
63326cd44c
Add format/ CompiledScriptSerializer (#198)
* Add format/ CompiledScriptSerializer

* Add CompiledScript output, write with CompiledScriptSerializer
2020-08-10 09:00:47 +02:00