diff --git a/ssc/ast/nodes.expressions.cs b/ssc/ast/nodes.expressions.cs index a71d106..f992a49 100644 --- a/ssc/ast/nodes.expressions.cs +++ b/ssc/ast/nodes.expressions.cs @@ -118,9 +118,9 @@ namespace arookas { public override void Compile(sunContext context) { Condition.Compile(context); - var falsePrologue = context.Text.GotoIfZero(); + var falsePrologue = context.Text.WriteJNE(); TrueBody.Compile(context); - var trueEpilogue = context.Text.Goto(); + var trueEpilogue = context.Text.WriteJMP(); context.Text.ClosePoint(falsePrologue); FalseBody.Compile(context); context.Text.ClosePoint(trueEpilogue); diff --git a/ssc/ast/nodes.flow.cs b/ssc/ast/nodes.flow.cs index 0f0e1ee..29da2ca 100644 --- a/ssc/ast/nodes.flow.cs +++ b/ssc/ast/nodes.flow.cs @@ -12,11 +12,11 @@ namespace arookas { public override void Compile(sunContext context) { Condition.Compile(context); - var trueBodyEpilogue = context.Text.GotoIfZero(); + var trueBodyEpilogue = context.Text.WriteJNE(); TrueBody.Compile(context); var falseBody = FalseBody; if (falseBody != null) { - var falseBodyEpilogue = context.Text.Goto(); + var falseBodyEpilogue = context.Text.WriteJMP(); context.Text.ClosePoint(trueBodyEpilogue); falseBody.Compile(context); context.Text.ClosePoint(falseBodyEpilogue); @@ -54,9 +54,9 @@ namespace arookas { var bodyPrologue = context.Text.OpenPoint(); var continuePoint = context.Text.OpenPoint(); Condition.Compile(context); - var bodyEpilogue = context.Text.GotoIfZero(); + var bodyEpilogue = context.Text.WriteJNE(); Body.Compile(context); - context.Text.Goto(bodyPrologue); + context.Text.WriteJMP(bodyPrologue); context.Text.ClosePoint(bodyEpilogue); var breakPoint = context.Text.OpenPoint(); context.Loops.Pop(context, breakPoint, continuePoint); @@ -76,8 +76,8 @@ namespace arookas { Body.Compile(context); var continuePoint = context.Text.OpenPoint(); Condition.Compile(context); - var bodyEpilogue = context.Text.GotoIfZero(); - context.Text.Goto(bodyPrologue); + var bodyEpilogue = context.Text.WriteJNE(); + context.Text.WriteJMP(bodyPrologue); context.Text.ClosePoint(bodyEpilogue); var breakPoint = context.Text.OpenPoint(); context.Loops.Pop(context, breakPoint, continuePoint); @@ -99,11 +99,11 @@ namespace arookas { TryCompile(Declaration, context); var bodyPrologue = context.Text.OpenPoint(); TryCompile(Condition, context); - var bodyEpilogue = context.Text.GotoIfZero(); + var bodyEpilogue = context.Text.WriteJNE(); Body.Compile(context); var continuePoint = context.Text.OpenPoint(); TryCompile(Iteration, context); - context.Text.Goto(bodyPrologue); + context.Text.WriteJMP(bodyPrologue); context.Text.ClosePoint(bodyEpilogue); var breakPoint = context.Text.OpenPoint(); context.Loops.Pop(context, breakPoint, continuePoint); @@ -133,10 +133,10 @@ namespace arookas { var expression = Expression; if (expression != null) { expression.Compile(context); - context.Text.ReturnValue(); + context.Text.WriteRET(); } else { - context.Text.ReturnVoid(); + context.Text.WriteRET0(); } } } @@ -149,7 +149,7 @@ namespace arookas { : base(location) { } public override void Compile(sunContext context) { - var point = context.Text.Goto(); + var point = context.Text.WriteJMP(); if (!context.Loops.AddBreak(point, IsNamed ? NameLabel.Value : null)) { throw new sunBreakException(this); } @@ -164,7 +164,7 @@ namespace arookas { : base(location) { } public override void Compile(sunContext context) { - var point = context.Text.Goto(); + var point = context.Text.WriteJMP(); if (!context.Loops.AddContinue(point, IsNamed ? NameLabel.Value : null)) { throw new sunContinueException(this); } diff --git a/ssc/ast/nodes.functions.cs b/ssc/ast/nodes.functions.cs index 2c230c9..806667a 100644 --- a/ssc/ast/nodes.functions.cs +++ b/ssc/ast/nodes.functions.cs @@ -44,7 +44,7 @@ namespace arookas { Arguments.Compile(context); callableInfo.OpenCallSite(context, Arguments.Count); if (IsStatement) { - context.Text.Pop(); + context.Text.WritePOP(); } } diff --git a/ssc/ast/nodes.literals.cs b/ssc/ast/nodes.literals.cs index a2693d4..9105a50 100644 --- a/ssc/ast/nodes.literals.cs +++ b/ssc/ast/nodes.literals.cs @@ -13,7 +13,7 @@ namespace arookas { protected sunIntLiteral(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.PushInt(Value); } + public override void Compile(sunContext context) { context.Text.WriteINT(Value); } sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) { return sunExpressionFlags.Literals; @@ -42,7 +42,7 @@ namespace arookas { } public override void Compile(sunContext context) { - context.Text.PushFloat(Value); + context.Text.WriteFLT(Value); } sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) { @@ -57,7 +57,7 @@ namespace arookas { } public override void Compile(sunContext context) { - context.Text.PushData(context.DataTable.Add(Value)); + context.Text.WriteSTR(context.DataTable.Add(Value)); } // string unescaping utility diff --git a/ssc/ast/nodes.operators.cs b/ssc/ast/nodes.operators.cs index 0e7c07a..3acdd10 100644 --- a/ssc/ast/nodes.operators.cs +++ b/ssc/ast/nodes.operators.cs @@ -24,7 +24,7 @@ namespace arookas { public sunLogOR(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.LogOR(); } + public override void Compile(sunContext context) { context.Text.WriteOR(); } } // precedence 1 @@ -34,7 +34,7 @@ namespace arookas { public sunLogAND(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.LogAND(); } + public override void Compile(sunContext context) { context.Text.WriteAND(); } } // precedence 2 @@ -44,7 +44,7 @@ namespace arookas { public sunBitOR(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.BitOR(); } + public override void Compile(sunContext context) { context.Text.WriteBOR(); } } // precedence 3 @@ -54,7 +54,7 @@ namespace arookas { public sunBitAND(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.BitAND(); } + public override void Compile(sunContext context) { context.Text.WriteBAND(); } } // precedence 4 @@ -64,7 +64,7 @@ namespace arookas { public sunEq(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Eq(); } + public override void Compile(sunContext context) { context.Text.WriteEQ(); } } class sunNtEq : sunOperator { @@ -73,7 +73,7 @@ namespace arookas { public sunNtEq(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.NtEq(); } + public override void Compile(sunContext context) { context.Text.WriteNE(); } } // precedence 5 @@ -83,7 +83,7 @@ namespace arookas { public sunLt(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Lt(); } + public override void Compile(sunContext context) { context.Text.WriteLT(); } } class sunLtEq : sunOperator { @@ -92,7 +92,7 @@ namespace arookas { public sunLtEq(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.LtEq(); } + public override void Compile(sunContext context) { context.Text.WriteLE(); } } class sunGt : sunOperator { @@ -101,7 +101,7 @@ namespace arookas { public sunGt(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Gt(); } + public override void Compile(sunContext context) { context.Text.WriteGT(); } } class sunGtEq : sunOperator { @@ -110,7 +110,7 @@ namespace arookas { public sunGtEq(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.GtEq(); } + public override void Compile(sunContext context) { context.Text.WriteGE(); } } // precedence 6 @@ -120,7 +120,7 @@ namespace arookas { public sunBitLsh(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.ShL(); } + public override void Compile(sunContext context) { context.Text.WriteSHL(); } } class sunBitRsh : sunOperator { @@ -129,7 +129,7 @@ namespace arookas { public sunBitRsh(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.ShR(); } + public override void Compile(sunContext context) { context.Text.WriteSHR(); } } // precedence 7 @@ -139,7 +139,7 @@ namespace arookas { public sunAdd(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Add(); } + public override void Compile(sunContext context) { context.Text.WriteADD(); } } class sunSub : sunOperator { @@ -148,7 +148,7 @@ namespace arookas { public sunSub(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Sub(); } + public override void Compile(sunContext context) { context.Text.WriteSUB(); } } // precedence 8 @@ -158,7 +158,7 @@ namespace arookas { public sunMul(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Mul(); } + public override void Compile(sunContext context) { context.Text.WriteMUL(); } } class sunDiv : sunOperator { @@ -167,7 +167,7 @@ namespace arookas { public sunDiv(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Div(); } + public override void Compile(sunContext context) { context.Text.WriteDIV(); } } class sunMod : sunOperator { @@ -176,7 +176,7 @@ namespace arookas { public sunMod(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Mod(); } + public override void Compile(sunContext context) { context.Text.WriteMOD(); } } // precedence 9 @@ -186,7 +186,7 @@ namespace arookas { public sunLogNOT(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.LogNOT(); } + public override void Compile(sunContext context) { context.Text.WriteNOT(); } } class sunNeg : sunOperator { public override int Precedence { get { return 9; } } @@ -194,7 +194,7 @@ namespace arookas { public sunNeg(sunSourceLocation location) : base(location) { } - public override void Compile(sunContext context) { context.Text.Neg(); } + public override void Compile(sunContext context) { context.Text.WriteNEG(); } } // assignment operators @@ -218,7 +218,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.Add(); + context.Text.WriteADD(); symbol.CompileSet(context); } } @@ -230,7 +230,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.Sub(); + context.Text.WriteSUB(); symbol.CompileSet(context); } } @@ -242,7 +242,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.Mul(); + context.Text.WriteMUL(); symbol.CompileSet(context); } } @@ -254,7 +254,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.Div(); + context.Text.WriteDIV(); symbol.CompileSet(context); } } @@ -266,7 +266,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.Mod(); + context.Text.WriteMOD(); symbol.CompileSet(context); } } @@ -278,7 +278,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.BitAND(); + context.Text.WriteBAND(); symbol.CompileSet(context); } } @@ -290,7 +290,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.BitOR(); + context.Text.WriteBOR(); symbol.CompileSet(context); } } @@ -302,7 +302,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.ShL(); + context.Text.WriteSHL(); symbol.CompileSet(context); } } @@ -314,7 +314,7 @@ namespace arookas { public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) { symbol.CompileGet(context); expression.Compile(context); - context.Text.ShR(); + context.Text.WriteSHR(); symbol.CompileSet(context); } } diff --git a/ssc/ast/nodes.system.cs b/ssc/ast/nodes.system.cs index 04f3d9a..ecae703 100644 --- a/ssc/ast/nodes.system.cs +++ b/ssc/ast/nodes.system.cs @@ -5,8 +5,8 @@ public override void Compile(sunContext context) { var builtinInfo = context.ResolveSystemBuiltin("yield"); - context.Text.CallBuiltin(builtinInfo.Index, 0); - context.Text.Pop(); + context.Text.WriteFUNC(builtinInfo.Index, 0); + context.Text.WritePOP(); } } @@ -16,8 +16,8 @@ public override void Compile(sunContext context) { var builtinInfo = context.ResolveSystemBuiltin("exit"); - context.Text.CallBuiltin(builtinInfo.Index, 0); - context.Text.Pop(); + context.Text.WriteFUNC(builtinInfo.Index, 0); + context.Text.WritePOP(); } } @@ -27,8 +27,8 @@ public override void Compile(sunContext context) { var builtinInfo = context.ResolveSystemBuiltin("dump"); - context.Text.CallBuiltin(builtinInfo.Index, 0); - context.Text.Pop(); + context.Text.WriteFUNC(builtinInfo.Index, 0); + context.Text.WritePOP(); } } @@ -38,8 +38,8 @@ public override void Compile(sunContext context) { var builtinInfo = context.ResolveSystemBuiltin("lock"); - context.Text.CallBuiltin(builtinInfo.Index, 0); - context.Text.Pop(); + context.Text.WriteFUNC(builtinInfo.Index, 0); + context.Text.WritePOP(); } } @@ -49,8 +49,8 @@ public override void Compile(sunContext context) { var builtinInfo = context.ResolveSystemBuiltin("unlock"); - context.Text.CallBuiltin(builtinInfo.Index, 0); - context.Text.Pop(); + context.Text.WriteFUNC(builtinInfo.Index, 0); + context.Text.WritePOP(); } } @@ -62,7 +62,7 @@ protected void Compile(sunContext context, sunBuiltinSymbol symbol) { Argument.Compile(context); - context.Text.CallBuiltin(symbol.Index, 1); + context.Text.WriteFUNC(symbol.Index, 1); } sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) { @@ -106,8 +106,8 @@ public override void Compile(sunContext context) { var builtinInfo = context.ResolveSystemBuiltin("print"); ArgumentList.Compile(context); - context.Text.CallBuiltin(builtinInfo.Index, ArgumentList.Count); - context.Text.Pop(); + context.Text.WriteFUNC(builtinInfo.Index, ArgumentList.Count); + context.Text.WritePOP(); } } } diff --git a/ssc/compiler.cs b/ssc/compiler.cs index fcc3ad9..efe1a41 100644 --- a/ssc/compiler.cs +++ b/ssc/compiler.cs @@ -26,7 +26,7 @@ namespace arookas { if (result != sunImportResult.Loaded) { throw new sunImportException(name, result); } - context.Text.Terminate(); // NOTETOSELF: don't do this via sunNode.Compile because imported files will add this as well + context.Text.WriteEND(); // NOTETOSELF: don't do this via sunNode.Compile because imported files will add this as well foreach (var function in context.SymbolTable.Functions) { function.Compile(context); } diff --git a/ssc/symbol table.cs b/ssc/symbol table.cs index 426f343..a41cb51 100644 --- a/ssc/symbol table.cs +++ b/ssc/symbol table.cs @@ -99,7 +99,7 @@ namespace arookas { throw new InvalidOperationException("Cannot compile builtins."); } public override void OpenCallSite(sunContext context, int argumentCount) { - context.Text.CallBuiltin(Index, argumentCount); + context.Text.WriteFUNC(Index, argumentCount); } public override void CloseCallSites(sunContext context) { } } @@ -124,14 +124,14 @@ namespace arookas { foreach (var parameter in Parameters) { context.Scopes.DeclareVariable(parameter); // since there is no AST node for these, they won't affect MaxLocalCount } - context.Text.StoreDisplay(1); - context.Text.DeclareLocal(Body.MaxLocalCount); + context.Text.WriteMKDS(1); + context.Text.WriteMKFR(Body.MaxLocalCount); Body.Compile(context); - context.Text.ReturnVoid(); + context.Text.WriteRET0(); context.Scopes.Pop(); } public override void OpenCallSite(sunContext context, int argumentCount) { - var point = context.Text.CallFunction(argumentCount); + var point = context.Text.WriteCALL(argumentCount); CallSites.Add(point); } public override void CloseCallSites(sunContext context) { @@ -178,13 +178,13 @@ namespace arookas { public abstract void CompileSet(sunContext context); public virtual void CompileInc(sunContext context) { CompileGet(context); - context.Text.PushInt(1); - context.Text.Add(); + context.Text.WriteINT(1); + context.Text.WriteADD(); } public virtual void CompileDec(sunContext context) { CompileGet(context); - context.Text.PushInt(1); - context.Text.Sub(); + context.Text.WriteINT(1); + context.Text.WriteSUB(); } } @@ -202,10 +202,10 @@ namespace arookas { Index = index; } - public override void CompileGet(sunContext context) { context.Text.PushVariable(Display, Index); } - public override void CompileSet(sunContext context) { context.Text.StoreVariable(Display, Index); } - public override void CompileInc(sunContext context) { context.Text.IncVariable(Display, Index); } - public override void CompileDec(sunContext context) { context.Text.DecVariable(Display, Index); } + public override void CompileGet(sunContext context) { context.Text.WriteVAR(Display, Index); } + public override void CompileSet(sunContext context) { context.Text.WriteASS(Display, Index); } + public override void CompileInc(sunContext context) { context.Text.WriteINC(Display, Index); } + public override void CompileDec(sunContext context) { context.Text.WriteDEC(Display, Index); } } class sunConstantSymbol : sunStorableSymbol { diff --git a/ssc/writer.cs b/ssc/writer.cs index c89e3a2..f37c710 100644 --- a/ssc/writer.cs +++ b/ssc/writer.cs @@ -2,153 +2,143 @@ namespace arookas { class sunWriter { - aBinaryWriter writer; + aBinaryWriter mWriter; - public uint Offset { get { return (uint)writer.Position; } } + public uint Offset { get { return (uint)mWriter.Position; } } public sunWriter(aBinaryWriter writer) { - this.writer = writer; + this.mWriter = writer; } public sunPoint OpenPoint() { return new sunPoint(Offset); } - public void ClosePoint(sunPoint point) { ClosePoint(point, (uint)writer.Position); } + public void ClosePoint(sunPoint point) { ClosePoint(point, (uint)mWriter.Position); } public void ClosePoint(sunPoint point, uint offset) { - writer.Keep(); - writer.Goto(point.Offset); - writer.Write32(offset); - writer.Back(); + mWriter.Keep(); + mWriter.Goto(point.Offset); + mWriter.Write32(offset); + mWriter.Back(); } - public void PushInt(int value) { + public void WriteINT(int value) { switch (value) { // shortcut commands - case 0: writer.Write8(0x25); return; - case 1: writer.Write8(0x26); return; + case 0: WriteINT0(); return; + case 1: WriteINT1(); return; } - writer.Write8(0x00); - writer.WriteS32(value); + mWriter.Write8(0x00); + mWriter.WriteS32(value); } - public void PushFloat(float value) { - writer.Write8(0x01); - writer.WriteF32(value); + public void WriteFLT(float value) { + mWriter.Write8(0x01); + mWriter.WriteF32(value); } - public void PushData(int dataIndex) { - writer.Write8(0x02); - writer.WriteS32(dataIndex); + public void WriteSTR(int index) { + mWriter.Write8(0x02); + mWriter.WriteS32(index); } - public void PushAddress(int value) { - writer.Write8(0x03); - writer.WriteS32(value); + public void WriteADR(int value) { + mWriter.Write8(0x03); + mWriter.WriteS32(value); } - public void PushVariable(sunVariableSymbol variableInfo) { PushVariable(variableInfo.Display, variableInfo.Index); } - public void PushVariable(int display, int variableIndex) { - writer.Write8(0x04); - writer.WriteS32(display); - writer.WriteS32(variableIndex); + public void WriteVAR(int display, int index) { + mWriter.Write8(0x04); + mWriter.WriteS32(display); + mWriter.WriteS32(index); } - public void Nop() { writer.Write8(0x05); } - public void IncVariable(sunVariableSymbol variableInfo) { IncVariable(variableInfo.Display, variableInfo.Index); } - public void DecVariable(sunVariableSymbol variableInfo) { DecVariable(variableInfo.Display, variableInfo.Index); } - public void IncVariable(int display, int variableIndex) { - writer.Write8(0x06); - writer.WriteS32(display); - writer.WriteS32(variableIndex); + public void WriteNOP() { mWriter.Write8(0x05); } + public void WriteINC(int display, int index) { + mWriter.Write8(0x06); + mWriter.WriteS32(display); + mWriter.WriteS32(index); } - public void DecVariable(int display, int variableIndex) { - writer.Write8(0x07); - writer.WriteS32(display); - writer.WriteS32(variableIndex); + public void WriteDEC(int display, int index) { + mWriter.Write8(0x07); + mWriter.WriteS32(display); + mWriter.WriteS32(index); } - - public void Add() { writer.Write8(0x08); } - public void Sub() { writer.Write8(0x09); } - public void Mul() { writer.Write8(0x0A); } - public void Div() { writer.Write8(0x0B); } - public void Mod() { writer.Write8(0x0C); } - - public void StoreVariable(sunVariableSymbol variableInfo) { StoreVariable(variableInfo.Display, variableInfo.Index); } - public void StoreVariable(int display, int variableIndex) { - writer.Write8(0x0D); - writer.Write8(0x04); // unused (skipped over by TSpcInterp) - writer.WriteS32(display); - writer.WriteS32(variableIndex); + public void WriteADD() { mWriter.Write8(0x08); } + public void WriteSUB() { mWriter.Write8(0x09); } + public void WriteMUL() { mWriter.Write8(0x0A); } + public void WriteDIV() { mWriter.Write8(0x0B); } + public void WriteMOD() { mWriter.Write8(0x0C); } + public void WriteASS(int display, int index) { + mWriter.Write8(0x0D); + mWriter.Write8(0x04); // unused (skipped over by TSpcInterp) + mWriter.WriteS32(display); + mWriter.WriteS32(index); } - - public void Eq() { writer.Write8(0x0E); } - public void NtEq() { writer.Write8(0x0F); } - public void Gt() { writer.Write8(0x10); } - public void Lt() { writer.Write8(0x11); } - public void GtEq() { writer.Write8(0x12); } - public void LtEq() { writer.Write8(0x13); } - public void Neg() { writer.Write8(0x14); } - public void LogNOT() { writer.Write8(0x15); } - public void LogAND() { writer.Write8(0x16); } - public void LogOR() { writer.Write8(0x17); } - public void BitAND() { writer.Write8(0x18); } - public void BitOR() { writer.Write8(0x19); } - public void ShL() { writer.Write8(0x1A); } - public void ShR() { writer.Write8(0x1B); } - - public sunPoint CallFunction(int argumentCount) { - writer.Write8(0x1C); + public void WriteEQ() { mWriter.Write8(0x0E); } + public void WriteNE() { mWriter.Write8(0x0F); } + public void WriteGT() { mWriter.Write8(0x10); } + public void WriteLT() { mWriter.Write8(0x11); } + public void WriteGE() { mWriter.Write8(0x12); } + public void WriteLE() { mWriter.Write8(0x13); } + public void WriteNEG() { mWriter.Write8(0x14); } + public void WriteNOT() { mWriter.Write8(0x15); } + public void WriteAND() { mWriter.Write8(0x16); } + public void WriteOR() { mWriter.Write8(0x17); } + public void WriteBAND() { mWriter.Write8(0x18); } + public void WriteBOR() { mWriter.Write8(0x19); } + public void WriteSHL() { mWriter.Write8(0x1A); } + public void WriteSHR() { mWriter.Write8(0x1B); } + public sunPoint WriteCALL(int count) { + mWriter.Write8(0x1C); sunPoint point = OpenPoint(); - writer.Write32(0); // dummy - writer.WriteS32(argumentCount); + mWriter.Write32(0); // dummy + mWriter.WriteS32(count); return point; } - public void CallFunction(sunPoint point, int argumentCount) { - writer.Write8(0x1C); - writer.Write32(point.Offset); - writer.WriteS32(argumentCount); + public void WriteCALL(sunPoint point, int count) { + mWriter.Write8(0x1C); + mWriter.Write32(point.Offset); + mWriter.WriteS32(count); } - public void CallBuiltin(int symbolIndex, int argumentCount) { - writer.Write8(0x1D); - writer.WriteS32(symbolIndex); - writer.WriteS32(argumentCount); + public void WriteFUNC(int index, int count) { + mWriter.Write8(0x1D); + mWriter.WriteS32(index); + mWriter.WriteS32(count); } - - public void DeclareLocal(int count) { - writer.Write8(0x1E); - writer.WriteS32(count); + public void WriteMKFR(int count) { + mWriter.Write8(0x1E); + mWriter.WriteS32(count); } - public void StoreDisplay(int display) { - writer.Write8(0x1F); - writer.WriteS32(display); + public void WriteMKDS(int display) { + mWriter.Write8(0x1F); + mWriter.WriteS32(display); } - - public void ReturnValue() { writer.Write8(0x20); } - public void ReturnVoid() { writer.Write8(0x21); } - - public sunPoint GotoIfZero() { - writer.Write8(0x22); + public void WriteRET() { mWriter.Write8(0x20); } + public void WriteRET0() { mWriter.Write8(0x21); } + public sunPoint WriteJNE() { + mWriter.Write8(0x22); sunPoint point = OpenPoint(); - writer.Write32(0); // dummy + mWriter.Write32(0); // dummy return point; } - public sunPoint Goto() { - writer.Write8(0x23); + public sunPoint WriteJMP() { + mWriter.Write8(0x23); sunPoint point = OpenPoint(); - writer.Write32(0); // dummy + mWriter.Write32(0); // dummy return point; } - public void GotoIfZero(sunPoint point) { - writer.Write8(0x22); - writer.Write32(point.Offset); + public void WriteJNE(sunPoint point) { + mWriter.Write8(0x22); + mWriter.Write32(point.Offset); } - public void Goto(sunPoint point) { - writer.Write8(0x23); - writer.Write32(point.Offset); + public void WriteJMP(sunPoint point) { + mWriter.Write8(0x23); + mWriter.Write32(point.Offset); } - public void Pop() { writer.Write8(0x24); } - - public void Terminate() { writer.Write8(0x27); } + public void WritePOP() { mWriter.Write8(0x24); } + public void WriteINT0() { mWriter.Write8(0x25); } + public void WriteINT1() { mWriter.Write8(0x26); } + public void WriteEND() { mWriter.Write8(0x27); } } struct sunPoint { - readonly uint offset; - public uint Offset { get { return offset; } } + readonly uint mOffset; + public uint Offset { get { return mOffset; } } public sunPoint(uint offset) { - this.offset = offset; + mOffset = offset; } } }