Skip to content

Commit 5f04754

Browse files
committed
Sped up 4.2%, by removing the parseds JSON round-trip when not in sanity check mode
1 parent 29eef43 commit 5f04754

83 files changed

Lines changed: 2446 additions & 2113 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Coordinator/src/build.vale

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,24 @@ func build_stuff(compiler_dir &Path, all_args &Array<imm, str>) {
140140
"Whether to reuse existing VAST",
141141
"false",
142142
"Whether to reuse the VAST created by (presumably) the last run."),
143+
Flag(
144+
"--run_backend",
145+
FLAG_BOOL(),
146+
"Whether to run the backend.",
147+
"true",
148+
"Whether to run the backend. True to run it, false to stop after frontend."),
149+
Flag(
150+
"--run_clang",
151+
FLAG_BOOL(),
152+
"Whether to run the clang step.",
153+
"true",
154+
"Whether to run the clang step. True to run it, false to stop after backend."),
155+
Flag(
156+
"--sanity_check",
157+
FLAG_BOOL(),
158+
"Whether to run self-diagnostics while compiling.",
159+
"true",
160+
"Whether to run self-diagnostics while compiling."),
143161
Flag(
144162
"--override_known_live_true",
145163
FLAG_BOOL(),
@@ -204,6 +222,9 @@ func build_stuff(compiler_dir &Path, all_args &Array<imm, str>) {
204222
include_builtins = parsed_flags.get_bool_flag("--include_builtins", true);
205223
output_vast = parsed_flags.get_bool_flag("--output_vast", true);
206224
reuse_vast = parsed_flags.get_bool_flag("--reuse_vast", false);
225+
run_backend = parsed_flags.get_bool_flag("--run_backend", true);
226+
run_clang = parsed_flags.get_bool_flag("--run_clang", true);
227+
sanity_check = parsed_flags.get_bool_flag("--sanity_check", true);
207228
output_vpst = parsed_flags.get_bool_flag("--output_vpst", true);
208229
no_std = parsed_flags.get_bool_flag("--no_std", false);
209230

@@ -299,6 +320,7 @@ func build_stuff(compiler_dir &Path, all_args &Array<imm, str>) {
299320
&project_vale_input_declarations,
300321
&project_non_vale_input_declarations,
301322
benchmark,
323+
sanity_check,
302324
verbose,
303325
debug_output,
304326
include_builtins,
@@ -337,6 +359,11 @@ func build_stuff(compiler_dir &Path, all_args &Array<imm, str>) {
337359
// print(f"Both a .vast and non-vast files were specified! If a .vast is specified, it must be the only input.")
338360
// sys.exit(1)
339361

362+
if not run_backend {
363+
println("Not running backend, stopping here.");
364+
return void();
365+
}
366+
340367
if verbose {
341368
println("Invoking Backend...")
342369
}
@@ -365,6 +392,11 @@ func build_stuff(compiler_dir &Path, all_args &Array<imm, str>) {
365392
panic("Backend returned error code {backend_return_code}, aborting.");
366393
}
367394

395+
if not run_clang {
396+
println("Not running clang, stopping here.");
397+
return void();
398+
}
399+
368400
if verbose {
369401
println("Collecting cc inputs...")
370402
}

Coordinator/src/valestrom.vale

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ func invoke_frontend(
55
project_vale_inputs &List<ProjectValeInputDeclaration>,
66
project_non_vale_inputs &List<ProjectNonValeInputDeclaration>,
77
benchmark bool,
8+
sanity_check bool,
89
verbose bool,
910
debug_output bool,
1011
include_builtins bool,
@@ -24,26 +25,33 @@ Subprocess {
2425
command_line_args.add(frontend_path.str());
2526
command_line_args.add("dev.vale.passmanager.PassManager");
2627
command_line_args.add("build");
27-
command_line_args.add("--output-dir");
28+
command_line_args.add("--output_dir");
2829
command_line_args.add(output_dir.str());
2930

3031
if benchmark {
3132
command_line_args.add("--benchmark");
3233
}
34+
if sanity_check {
35+
command_line_args.add("--sanity_check");
36+
command_line_args.add("true");
37+
}
3338
if verbose {
3439
command_line_args.add("--verbose");
3540
}
3641
if debug_output {
3742
command_line_args.add("--debug_output");
3843
}
3944
if not include_builtins {
40-
command_line_args.add("--include-builtins false");
45+
command_line_args.add("--include_builtins");
46+
command_line_args.add("false");
4147
}
4248
if not output_vast {
43-
command_line_args.add("--output-vast false");
49+
command_line_args.add("--output_vast");
50+
command_line_args.add("false");
4451
}
4552
if not output_vpst {
46-
command_line_args.add("--output-vpst false");
53+
command_line_args.add("--output_vpst");
54+
command_line_args.add("false");
4755
}
4856

4957
project_directories.each((declaration) => {

Frontend/Builtins/src/dev/vale/Builtins.scala

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package dev.vale
33
import scala.io.Source
44

55
object Builtins {
6-
val NAMESPACE_COORD = PackageCoordinate("", Vector.empty)
6+
def NAMESPACE_COORD(interner: Interner) = {
7+
interner.intern(PackageCoordinate("", Vector.empty))
8+
}
79

810
val moduleToFilename =
911
Map(
@@ -38,23 +40,34 @@ object Builtins {
3840
// bare minimum. For example, the most basic test is `func main() int { return 42; }`, and we don't want it
3941
// to fail just because the builtin-yet-unused `func as<T, X>(x X) Opt<T> { ... }` doesn't want to
4042
// work right now.
41-
def getModulizedCodeMap(): FileCoordinateMap[String] = {
42-
moduleToFilename.foldLeft(FileCoordinateMap[String](Map()))({
43-
case (prev, (moduleName, filename)) => {
44-
prev.add("v", Vector("builtins", moduleName), filename, load(filename))
45-
}
43+
def getModulizedCodeMap(interner: Interner): FileCoordinateMap[String] = {
44+
val result = new FileCoordinateMap[String]()
45+
moduleToFilename.foreach({ case (moduleName, filename) =>
46+
result.put(
47+
interner.intern(FileCoordinate(
48+
interner.intern(PackageCoordinate("v", Vector("builtins", moduleName))),
49+
filename)),
50+
load(filename))
4651
})
52+
result
4753
}
4854

4955
// Add an empty v.builtins.whatever so that the aforementioned imports still work.
5056
// But load the actual files all inside the root paackage.
51-
def getCodeMap(): FileCoordinateMap[String] = {
52-
moduleToFilename.foldLeft(FileCoordinateMap[String](Map()))({
53-
case (prev, (moduleName, filename)) => {
54-
prev
55-
.add("v", Vector("builtins", moduleName), filename, "")
56-
.add(NAMESPACE_COORD.module, NAMESPACE_COORD.packages, filename, load(filename))
57-
}
57+
def getCodeMap(interner: Interner): FileCoordinateMap[String] = {
58+
val result = new FileCoordinateMap[String]()
59+
moduleToFilename.foreach({ case (moduleName, filename) =>
60+
result.put(
61+
interner.intern(FileCoordinate(
62+
interner.intern(PackageCoordinate("v", Vector("builtins", moduleName))),
63+
filename)),
64+
"")
65+
result.put(
66+
interner.intern(FileCoordinate(
67+
interner.intern(PackageCoordinate(NAMESPACE_COORD(interner).module, NAMESPACE_COORD(interner).packages)),
68+
filename)),
69+
load(filename))
5870
})
71+
result
5972
}
6073
}

Frontend/CompileServer/src/dev/vale/compileserver/BuildAction.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ package dev.vale.compileserver
22

33
import com.google.cloud.functions.{HttpFunction, HttpRequest, HttpResponse}
44
import dev.vale.passmanager.PassManager
5-
import dev.vale.Err
5+
import dev.vale.{Err, Interner, Ok, vimpl}
66
import PassManager.{Options, SourceInput, build, jsonifyProgram}
7-
import dev.vale.{Err, Ok, vimpl}
87

98
class BuildAction extends HttpFunction {
109
override def service(request: HttpRequest, response: HttpResponse): Unit = {
@@ -15,13 +14,14 @@ class BuildAction extends HttpFunction {
1514
return
1615
}
1716

17+
val interner = new Interner()
1818
val options =
1919
Options(
20-
Vector(SourceInput(PassManager.DEFAULT_PACKAGE_COORD, "in.vale", code)),
20+
Vector(SourceInput(PassManager.DEFAULT_PACKAGE_COORD(interner), "in.vale", code)),
2121
Some(""),
2222
false, false, true, false, true, None, false, true, true, true)
2323
val json =
24-
PassManager.build(options) match {
24+
PassManager.build(interner, options) match {
2525
case Ok(Some(programH)) => jsonifyProgram(vimpl(), programH)
2626
case Err(error) => {
2727
response.setStatusCode(400)

Frontend/CompileServer/src/dev/vale/compileserver/RunAction.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import com.google.cloud.functions.{HttpFunction, HttpRequest, HttpResponse}
55
import dev.vale.passmanager.PassManager
66
import dev.vale.testvm.Vivem
77
import PassManager.{Options, SourceInput}
8-
import dev.vale.{Err, Ok}
9-
import dev.vale.Err
8+
import dev.vale.{Err, Interner, Ok}
109

1110
class RunAction extends HttpFunction {
1211
override def service(request: HttpRequest, response: HttpResponse): Unit = {
@@ -17,13 +16,14 @@ class RunAction extends HttpFunction {
1716
return
1817
}
1918

19+
val interner = new Interner()
2020
val options =
2121
Options(
22-
Vector(SourceInput(PassManager.DEFAULT_PACKAGE_COORD, "in.vale", code)),
22+
Vector(SourceInput(PassManager.DEFAULT_PACKAGE_COORD(interner), "in.vale", code)),
2323
Some(""),
2424
false, false, true, false, true, None, false, true, true, true)
2525
val program =
26-
PassManager.build(options) match {
26+
PassManager.build(interner, options) match {
2727
case Ok(Some(programH)) => programH
2828
case Err(error) => {
2929
response.setStatusCode(400)

Frontend/FinalAST/src/dev/vale/finalast/types.scala

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dev.vale.finalast
22

3-
import dev.vale.{FileCoordinate, PackageCoordinate, vassert, vfail}
4-
import dev.vale.vimpl
3+
import dev.vale.{FileCoordinate, Interner, PackageCoordinate, vassert, vfail, vimpl}
54

65
// Represents a reference type.
76
// A reference contains these things:
@@ -93,30 +92,30 @@ case class ReferenceH[+T <: KindH](
9392

9493
// A value, a thing that can be pointed at. See ReferenceH for more information.
9594
sealed trait KindH {
96-
def packageCoord: PackageCoordinate
95+
def packageCoord(interner: Interner): PackageCoordinate
9796
}
9897
object IntH {
9998
val i32 = IntH(32)
10099
}
101100
case class IntH(bits: Int) extends KindH {
102101
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
103-
override def packageCoord: PackageCoordinate = PackageCoordinate.BUILTIN
102+
override def packageCoord(interner: Interner): PackageCoordinate = PackageCoordinate.BUILTIN(interner)
104103
}
105104
case class VoidH() extends KindH {
106105
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
107-
override def packageCoord: PackageCoordinate = PackageCoordinate.BUILTIN
106+
override def packageCoord(interner: Interner): PackageCoordinate = PackageCoordinate.BUILTIN(interner)
108107
}
109108
case class BoolH() extends KindH {
110109
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
111-
override def packageCoord: PackageCoordinate = PackageCoordinate.BUILTIN
110+
override def packageCoord(interner: Interner): PackageCoordinate = PackageCoordinate.BUILTIN(interner)
112111
}
113112
case class StrH() extends KindH {
114113
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
115-
override def packageCoord: PackageCoordinate = PackageCoordinate.BUILTIN
114+
override def packageCoord(interner: Interner): PackageCoordinate = PackageCoordinate.BUILTIN(interner)
116115
}
117116
case class FloatH() extends KindH {
118117
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
119-
override def packageCoord: PackageCoordinate = PackageCoordinate.BUILTIN
118+
override def packageCoord(interner: Interner): PackageCoordinate = PackageCoordinate.BUILTIN(interner)
120119
}
121120
// A primitive which can never be instantiated. If something returns this, it
122121
// means that it will never actually return. For example, the return type of
@@ -126,23 +125,23 @@ case class FloatH() extends KindH {
126125
// where None is never, Some(None) is Void, and Some(Some(_)) is a normal thing.
127126
case class NeverH(fromBreak: Boolean) extends KindH {
128127
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
129-
override def packageCoord: PackageCoordinate = PackageCoordinate.BUILTIN
128+
override def packageCoord(interner: Interner): PackageCoordinate = PackageCoordinate.BUILTIN(interner)
130129
}
131130

132131
case class InterfaceRefH(
133132
// Unique identifier for the interface.
134133
fullName: FullNameH
135134
) extends KindH {
136135
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
137-
override def packageCoord: PackageCoordinate = fullName.packageCoordinate
136+
override def packageCoord(interner: Interner): PackageCoordinate = fullName.packageCoordinate
138137
}
139138

140139
case class StructRefH(
141140
// Unique identifier for the interface.
142141
fullName: FullNameH
143142
) extends KindH {
144143
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
145-
override def packageCoord: PackageCoordinate = fullName.packageCoordinate
144+
override def packageCoord(interner: Interner): PackageCoordinate = fullName.packageCoordinate
146145
}
147146

148147
// An array whose size is known at compile time, and therefore doesn't need to
@@ -152,7 +151,7 @@ case class StaticSizedArrayHT(
152151
name: FullNameH,
153152
) extends KindH {
154153
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
155-
override def packageCoord: PackageCoordinate = name.packageCoordinate
154+
override def packageCoord(interner: Interner): PackageCoordinate = name.packageCoordinate
156155
}
157156

158157
// An array whose size is known at compile time, and therefore doesn't need to
@@ -175,7 +174,7 @@ case class RuntimeSizedArrayHT(
175174
name: FullNameH,
176175
) extends KindH {
177176
val hash = runtime.ScalaRunTime._hashCode(this); override def hashCode(): Int = hash;
178-
override def packageCoord: PackageCoordinate = name.packageCoordinate
177+
override def packageCoord(interner: Interner): PackageCoordinate = name.packageCoordinate
179178
}
180179

181180
case class RuntimeSizedArrayDefinitionHT(

0 commit comments

Comments
 (0)