Strings 19
This commit is contained in:
parent
10c44eab2e
commit
eec0a94aac
15 changed files with 358 additions and 55 deletions
|
|
@ -4,6 +4,7 @@ import clox.compiler;
|
|||
import clox.chunk;
|
||||
import clox.scanner;
|
||||
import clox.value;
|
||||
import clox.object;
|
||||
|
||||
alias ParseFn = void function(Compiler* compiler);
|
||||
|
||||
|
|
@ -52,13 +53,22 @@ private void binary(Compiler* compiler){
|
|||
}
|
||||
}
|
||||
private void literal(Compiler* compiler){
|
||||
switch(compiler.parser.previous.type){
|
||||
Token token = compiler.parser.previous;
|
||||
compiler.emitter.setLine(token.line);
|
||||
switch(token.type){
|
||||
case Token.Type.True: compiler.emitter.emit(OpCode.True); break;
|
||||
case Token.Type.False: compiler.emitter.emit(OpCode.False); break;
|
||||
case Token.Type.Nil: compiler.emitter.emit(OpCode.Nil); break;
|
||||
default: assert(0);
|
||||
}
|
||||
}
|
||||
private void strlit(Compiler* compiler) @nogc{
|
||||
Token token = compiler.parser.previous;
|
||||
string str = token.lexeme[1 .. $-1];
|
||||
Obj.String* strObj = Obj.String.copy(str);
|
||||
compiler.emitter.setLine(token.line);
|
||||
compiler.emitter.emitConstant(Value.str(strObj));
|
||||
}
|
||||
|
||||
struct ParseRule{
|
||||
ParseFn prefix;
|
||||
|
|
@ -104,7 +114,7 @@ immutable ParseRule[Token.Type.max+1] rules = [
|
|||
Token.Type.Less : ParseRule(null, &binary, Precedence.Comparison),
|
||||
Token.Type.LessEqual : ParseRule(null, &binary, Precedence.Comparison),
|
||||
Token.Type.Identifier : ParseRule(null, null, Precedence.None),
|
||||
Token.Type.String : ParseRule(null, null, Precedence.None),
|
||||
Token.Type.String : ParseRule(&strlit, null, Precedence.None),
|
||||
Token.Type.Number : ParseRule(&number, null, Precedence.None),
|
||||
Token.Type.And : ParseRule(null, null, Precedence.None),
|
||||
Token.Type.Class : ParseRule(null, null, Precedence.None),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue