diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-03 11:46:35 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-03 11:46:35 +0100 |
| commit | fc22eb6b047c5a3bbabdf728edb84cfdf81ba9b5 (patch) | |
| tree | 2405cf68c1c89d38ff87100bbbe7268b38afe0b6 /src/main/java | |
| parent | d0a86977da222df158778dd7be95873da44ed90a (diff) | |
Extract print name and type
Diffstat (limited to 'src/main/java')
3 files changed, 18 insertions, 16 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedBuiltins.java b/src/main/java/org/shedlang/compiler/ShedBuiltins.java index fde2dae6..14a2e6ce 100644 --- a/src/main/java/org/shedlang/compiler/ShedBuiltins.java +++ b/src/main/java/org/shedlang/compiler/ShedBuiltins.java @@ -1,10 +1,24 @@ package org.shedlang.compiler; +import org.shedlang.compiler.types.Effects; +import org.shedlang.compiler.types.FunctionType; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.Types; + +import java.util.List; public class ShedBuiltins { private ShedBuiltins() { } public static final NamespaceName NAMESPACE_NAME = NamespaceName.of("Shed", "Builtins"); + + public static final String PRINT_NAME = "print"; + + public static final FunctionType PRINT_TYPE = new FunctionType( + List.of(Types.STRING), + List.of(), + Effects.IO, + Types.UNIT + ); } diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java index 39250e27..6f72328f 100644 --- a/src/main/java/org/shedlang/compiler/ShedCompiler.java +++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java @@ -9,7 +9,6 @@ import org.shedlang.compiler.stackir.instructions.Instruction; import org.shedlang.compiler.typechecker.TypeChecker; import org.shedlang.compiler.typechecker.TypeCheckerContext; import org.shedlang.compiler.types.Effects; -import org.shedlang.compiler.types.FunctionType; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Types; import org.shedlang.compiler.util.P; @@ -37,25 +36,14 @@ public class ShedCompiler { var namespaces = new LinkedHashMap<NamespaceName, List<Instruction>>(); var typeCheckerContext = TypeCheckerContext.EMPTY - // TODO: remove duplication of builtin namespace definition .addNamespaceFields(ShedBuiltins.NAMESPACE_NAME, P.orderedMap( - Map.entry("print", new FunctionType( - List.of(Types.STRING), - List.of(), - Effects.IO, - Types.UNIT - )) + Map.entry(ShedBuiltins.PRINT_NAME, ShedBuiltins.PRINT_TYPE) )) .enterBlock(P.map( Map.entry("Io", Types.effectType(Effects.IO)), Map.entry("Unit", Types.metaType(Types.UNIT)), - Map.entry("print", new FunctionType( - List.of(Types.STRING), - List.of(), - Effects.IO, - Types.UNIT - )) + Map.entry(ShedBuiltins.PRINT_NAME, ShedBuiltins.PRINT_TYPE) )); for (var sourceFilePath : sourceFilePaths) { diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java index 0cae1941..2301510d 100644 --- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java +++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java @@ -109,8 +109,8 @@ public class StackCompiler { instructions = instructions .plus(new NamespaceImportInstruction(ShedBuiltins.NAMESPACE_NAME, node.source())) - .plus(new FieldLoadInstruction(ShedBuiltins.NAMESPACE_NAME, "print", node.source())) - .plus(new LocalStoreInstruction("print", node.source())); + .plus(new FieldLoadInstruction(ShedBuiltins.NAMESPACE_NAME, ShedBuiltins.PRINT_NAME, node.source())) + .plus(new LocalStoreInstruction(ShedBuiltins.PRINT_NAME, node.source())); for (var statement : node.body()) { instructions = instructions.plusAll(compileNamespaceStatement(statement)); |
