Goose  Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

84 check-ins using file bs/builtins/statements/while.cpp version d7ab488717

2020-12-26
14:59
Build fix check-in: c8058eaaf9 user: achavasse tags: trunk
2020-12-18
01:29
References refactor: references are now values all the way to the llr, where a new "CalcAddress" instruction represents a conversion from a logical address (location + path) into an actual runtime or compilation time address. This is in preparation to allow references to be stored in variables or passed as parameters. (It just took 4.5 months to finish this... Refactoring just sucks) check-in: 8ddd71f9b2 user: achavasse tags: trunk
2020-08-02
19:26
Execute: use a proper call stack so that we'll be able later on to reference values living on the caller's stack to be able to pass references around at compilation time. check-in: 151e3b4d8c user: achavasse tags: trunk
2020-07-07
21:08
When creating a reference to a local variable, if it contains a reference, just unwrap it. check-in: 421381dc15 user: achavasse tags: trunk
2020-07-06
19:49
Fixes for the current git version of clang/llvm. check-in: 834d8f14b9 user: achavasse tags: trunk
2020-07-05
20:15
Implemented reference parsing. check-in: 086a58a7a3 user: achavasse tags: trunk
2020-07-04
13:08
  • Verifier: fixed havocing of individual members of aggregate types not working.
  • Added verification loop tests (both passing and failing) that modify a tuple inside of the loop.
check-in: e3b9bd4c1b user: achavasse tags: trunk
12:24
Verification: fixed a bug with address havocing. check-in: 879d75711b user: achavasse tags: trunk
2020-07-03
23:09
Removed a couple of obsolete comments. check-in: 4dd8529aac user: achavasse tags: trunk
23:03
  • Fixed reference typechecking issues.
  • Fixed tuple initialization.
  • Added verification tests involving values stored in tuples.
check-in: 4be05b9f94 user: achavasse tags: trunk
2020-07-02
19:31
Added tests for tuples of references. check-in: 05ec684dbf user: achavasse tags: trunk
00:47
  • Added overloads to the comma operator to be able to construct tuples of references.
  • Fixed reference typechecking rules so that overloads taking values directly have priority over overloads taking references.
  • Fixed a template function expression parsing bug.
check-in: 04aea08600 user: achavasse tags: trunk
2020-06-27
22:05
Clearly separate the type checking rules and the unification rules, instead of lumping them all together in a single set of patterns which is increasingly confusing. check-in: b64ea47f6b user: achavasse tags: trunk
2020-06-26
23:34
Cleanup:
  • Removed the poorly thought out "domain" system that was intended to allow for different implementations of functions for runtime and for compilation time, which was adding an absurd amount of crap everywhere and should be unnecessary with the current planned approach for implementing data structures.
  • The using statement doesn't do lazy parsing anymore. Lazy parsing is better left to specific constructs that require them (such as function bodies and later on class/structs). This removes the only case of significant newline character in the language.
check-in: 568c366a36 user: achavasse tags: trunk
2020-06-20
19:59
Verifier: some fixes to correctly handle tuples. Still not quite working yet. check-in: 060e84f233 user: achavasse tags: trunk
16:07
Fixed one of the tuple unification rule. check-in: 48bb81ebdd user: achavasse tags: trunk
14:32
  • Got rid of the gross system of performing unifications twice in all cases. It's only really needed when invoking template functions.
  • Since the above had the unexpected side effect of fixing the tuple Initialize() overloads not being called, fixed those (which were actually broken).
check-in: c3f897359f user: achavasse tags: trunk
2020-06-15
22:09
Refactored the integer/ct_int unification to defer the size/sign check to a postprocessing callback. check-in: ac4e681af3 user: achavasse tags: trunk
19:45
Call "Postprocess" on unification solutions during the best solution lookup, so that custom postprocessing callbacks can trigger the rejection of a solution. check-in: daee557086 user: achavasse tags: trunk
19:16
Moved some common code into a helper function to facilitate some future refactoring. check-in: df0ad9a7f1 user: achavasse tags: trunk
2020-06-13
22:59
  • Implemented Initialize overloads for tuples.
  • Lots of cleanup.
check-in: 947b9d7cfc user: achavasse tags: trunk
13:34
Implemented new rules for implicit dereferencing and implicit referencing. check-in: 4d5cc07d86 user: achavasse tags: trunk
13:15
Rewrote the reference unification rules. check-in: ba97c17dee user: achavasse tags: trunk
13:05
Fixed eager evaluation not failing gracefully in some cases. check-in: c70d722331 user: achavasse tags: trunk
12:51
Modify the reference IR representation so that we can have holes for the behavior. check-in: 385846b609 user: achavasse tags: trunk
2020-06-05
18:57
Verifier: loops: instead of tracking and havocing modified variables during loops, track modified addresses, so that modifying only some fields of a tuple will not result in forgetting everything about the other fields. check-in: 54ef60956e user: achavasse tags: trunk
00:42
Cleanup. check-in: ea28d09f80 user: achavasse tags: trunk
00:35
Verifier: handle "StoreToAddress" for addresses that point to tuple members. check-in: 077c944c02 user: achavasse tags: trunk
2020-06-03
23:08
  • Verifier: a bunch of refactoring to better keep track of the types of the z3 expressions stored in variables.
  • Verifier: handle "LoadFromAddress" for addresses that point to tuple members.
check-in: b00c682e34 user: achavasse tags: trunk
2020-06-01
18:39
Verifier: go through the LowerConstantForVerification extension point when building a constant expression. check-in: 98739f02b6 user: achavasse tags: trunk
01:21
Cleanup. check-in: c793734a0a user: achavasse tags: trunk
01:06
Verifier: refactored type handling and extended it to handle tuple types. check-in: 6f98718d3b user: achavasse tags: trunk
2020-05-30
14:25
Enable's z3 new arith solver as the old one takes a very long time in one of the tests with the latest version of z3. check-in: 4b56796791 user: achavasse tags: trunk
2020-05-25
22:08
  • Added a "LowerConstantForRuntime" extension point, similar to LowerTypeForRunTime.
  • Added a way to represent Record constants.
  • Implemented LowerConstantForRunTime for tuples, which lowers them into a constant record.
  • Implemented codegen for constant records.
  • Implemented codegen for storing an aggregate constant.
  • Implemented a way (not exposed in the syntax for now) to create vararg function types, to be able to call vararg external functions such as printf.
  • Enabled the tuple runtime/compilation combined test which is now working.
  • Various bug fixes.
check-in: bb17e9f3dd user: achavasse tags: trunk
2020-05-23
12:58
  • Fixed the hole matching score which prevented some unification rules to be selected.
  • Implemented LowerTypeForRuntime for tuples.
  • Implemented an unification rule for constant tuples.
  • Added some debugging helpers.
check-in: c39a302502 user: achavasse tags: trunk
2020-05-21
17:26
Created a new term type to represent holes in IR expressions. The old system of representing holes using a vector of two values led to ambiguousness when creating some rule patterns: a tuple whose both type vector and payload vector were holes would be indistinguishable from a tuple containing two elements. check-in: 51c6751b6d user: achavasse tags: trunk
2020-05-19
17:07
Added an unification rule for computed tuples which creates constant references for each members and unifies them. check-in: 2ecfa85c23 user: achavasse tags: trunk
15:03
The TemporaryAddress address calculation mode now carries around the initializer value, in case the temporary doesn't already exist. This allows a reference to a temporary to be completely self contained in its value, rather than requiring a separate setup instruction to be emited in the cfg. check-in: 934090c5a8 user: achavasse tags: trunk
2020-05-18
12:39
  • Renamed the LowerType extension point to LowerTypeForRuntime as we'll need a similar "LowerTypeForVerification" later on.
  • The function type case of LowerTypeForRuntime is no longer hardcoded in the c++ utility function of the same name but implemented as an overload of the extension point.
check-in: 8818ea1872 user: achavasse tags: trunk
2020-05-17
17:30
  • Clean up the "default return value from top level file functions" stuff.
  • Standardize to a default return value of 0 for the top level file both in execution mode and in compilation mode.
  • Implemented a combined execution/compilation test for tuples in preparation for implementing tuple compilation. (not enabled yet)
check-in: 397f594186 user: achavasse tags: trunk
2020-05-16
19:32
Repo: fix syntax highlighting with the latest trunk verison of fossil. check-in: 807a4f208b user: achavasse tags: trunk
19:21
Minor cleanups. check-in: 6099081bdd user: achavasse tags: trunk
18:39
Now that we can assign mutable references, it is possible to assign to a tuple member. Added a test for that. check-in: 27a74436f3 user: achavasse tags: trunk
18:32
The builtin assignment operator overloads now return the reference to support chained assignments. check-in: ba2a02025d user: achavasse tags: trunk
2020-05-14
22:24
The compound assignment operators now take a mutable reference as the lhs. check-in: e4cd7e104e user: achavasse tags: trunk
2020-05-13
18:15
References:
  • When doing variable declaration local type inference, look for an initialization function that takes a mutable reference on the lhs, instead of a local variable.
  • As a result of the above, got rid of Initialize() overloads for local variables.
  • The assignment operator now takes a mutable reference on the lhs, instead of directly working on a local variable.
check-in: ebdba2e941 user: achavasse tags: trunk
2020-05-04
18:43
Refactored the Initialize() extension point to take a mutable reference instead of directly taking a locvar. check-in: 10df99e08a user: achavasse tags: trunk
2020-05-03
15:32
Simplified the llr address representation. check-in: 0b4eb97a44 user: achavasse tags: trunk
2020-04-22
23:27
Removed llr::SetVar, now using the more generic llr::Store instead. check-in: 036092faf1 user: achavasse tags: trunk
2020-04-15
06:36
Removed llr::GetVar, now using the more generic llr::Load instead. check-in: 20c242dc4f user: achavasse tags: trunk
2020-04-11
23:33
Updated to the latest git version of llvm. check-in: d38aab5fc2 user: achavasse tags: trunk
21:01
  • Implemented load, store and pointers in execute and codegen.
  • Implemented load and pointers in verify.
  • When unifying a local variable against a parameter, generate a reference.
check-in: e814ad7e23 user: achavasse tags: trunk
2020-03-11
22:11
Reference: implemented a pattern provider for mutable references. check-in: 58491e544e user: achavasse tags: trunk
2020-03-07
16:36
More work and fixes on references. Reading a tuple member using the . operator (which returns a constant reference) is now working. check-in: 1c33db7499 user: achavasse tags: trunk
2020-02-29
15:07
Implemented unification for references. check-in: 4940c5c904 user: achavasse tags: trunk
2020-02-27
22:15
Implemented the dot operator for tuples. check-in: 2f953408d9 user: achavasse tags: trunk
2020-02-26
22:48
builtins: added the reference type. check-in: b4dfb8c928 user: achavasse tags: trunk
2020-02-23
23:57
llr: added the load and store instructions. check-in: f34a90f312 user: achavasse tags: trunk
2020-02-22
21:22
llr: added the GEP instruction. check-in: 1f1bc22ffc user: achavasse tags: trunk
2020-02-20
22:44
Minor code formatting cleanup. check-in: 0af3d1c728 user: achavasse tags: trunk
22:42
  • Wrap function parameters into local variables, which will make it easier later on to distinguish temporaries from stack values when implementing references.
  • Register parameters for destruction, which was missing.
  • Added an invocation rule for local variables, so that they can be invoked if they contain an invokable object.
check-in: 652107629a user: achavasse tags: trunk
2020-02-17
23:15
Register temporary values returned from function calls for destruction, so that DestroyValue() is invoked on them. check-in: a0ee0dfc2e user: achavasse tags: trunk
2020-02-15
15:13
Started to implement a virtual memory sub system for compilation time execution. check-in: f18062b8da user: achavasse tags: trunk
2020-02-09
19:23
Small cosmetic error messages fixes. check-in: edf6a9d2ed user: achavasse tags: trunk
19:02
Builtin operators:
  • Verification time assertion failure errors for builtin division, module and shift operators are anchored to a valid source code location.
  • Added custom error messages for the above.
  • Added tests for the above.
check-in: c4a6d4d66b user: achavasse tags: trunk
16:55
  • The builtin integer division and modulo operators now require a compile-time proof that the divider is not zero.
  • The builtin integer left shit and right shift operators now require a compile-time proof that the rhs value is less than the bitsize of lhs.
check-in: 8c4fcc68b0 user: achavasse tags: trunk
2020-02-04
21:42
Builtins: implemented helpers to construct complex computed values using expression templates. check-in: 6ed2bd7a75 user: achavasse tags: trunk
20:20
Unfuck some documentation. check-in: 87f7150020 user: achavasse tags: trunk
2020-02-02
23:13
Docs: small layout improvement. check-in: 0521bfdcdf user: achavasse tags: trunk
23:10
Some documentation cleanup and update. check-in: c9186b7b9f user: achavasse tags: trunk
21:47
Refinement types: implemented tests and fixed some issues. check-in: 972099a359 user: achavasse tags: trunk
2020-02-01
23:28
Refinement types:
  • Assert type predicates after a variable assignment
  • Check type predicates when checking a compile-time function call
check-in: 216ff2d9c8 user: achavasse tags: trunk
22:54
Refinement types: when calling a function, assert the param's predicates and assume the return type's predicates. check-in: d828564e66 user: achavasse tags: trunk
22:32
Refinement types: assert the return type predicates when returning from a function. check-in: 7259273cf9 user: achavasse tags: trunk
2020-01-28
21:52
Refinement types: assume parameter types predicates at the beginning of functions. check-in: 7f16edb82a user: achavasse tags: trunk
2020-01-27
00:24
Refinement types: parse predicates lazily to play well with templates. check-in: e57c63fea5 user: achavasse tags: trunk
2020-01-23
22:24
Refinement types: implemented the where operator to add predicates to a type. check-in: 9586391cdb user: achavasse tags: trunk
2020-01-22
22:14
Standardized the way type values are encoded to make room for an optional pointer to a list of predicates for refinement types. check-in: cc380f4f8f user: achavasse tags: trunk
2020-01-16
21:41
ir: also make void* always compare to true to make it easier to work with llvm type pointers embedded inside type IR expressions. check-in: 6680e30102 user: achavasse tags: trunk
20:46
ir: comparing ptr< void > is considered always true, to allow to more easily attach opaque data onto ir expressions without changing their semantics. check-in: 1a704c5a51 user: achavasse tags: trunk
2020-01-13
23:13
Renamed the runtime struct type to "record" to avoid future confusion since it's a much lower level type (essentially just a tuple restricted to runtime types) than the future "struct" type. check-in: b573d100cf user: achavasse tags: trunk
2020-01-12
21:10
builtins: added wrapper types to allow terms and values to be manipulated at low level within the language itself. check-in: ceb0b190d6 user: achavasse tags: trunk
20:03
builtins: added a wrapper for a CodeBuilder pointer. check-in: d4e5c46e57 user: achavasse tags: trunk
2020-01-11
18:28
  • Moved the cfg and lifetime management stuff into a CodeBuilder object owned by sema::Context. This is in preparation to allow alternative implementations of the builder, for instance to build classes.
  • Pass the context to intrinsic functions, which removes their dependency to the parser the need for the ugly "GetCurrentParser" static function.
check-in: b3aeaae2df user: achavasse tags: trunk