Carp/test
Scott Olsen e1943b29a9
Refactor: clean up Env module, store type environments in modules (#1207)
* refactor: major environment mgmt refactor

This big refactor primarily changes two things in terms of behavior:

1. Stores a SymPath on concretely named (non-generic) struct types;
   before we stored a string.
2. The SymPath mentioned in (1.) designates where the struct is stored
   in the current environment chain. Modules now carry a local type
   environment in addition to their local value environments. Any types
   defined in the module are added to this environment rather than the
   global type environment.

To resolve a type such as `Foo.Bar` we now do the following:

- Search the *global value environment* for the Foo module.
- Get the type environment stored in the Foo module.
- Search for Bar in the Foo module's type environment.

Additionally, this commit eliminates the Lookup module entirely and
refactors the Env module to handle all aspects of environment management
in hopefully a more reusable fashion.

I also took the opportunity to refactor primitiveDeftype in Primitives
and qualifySym in Qualify, both of which were hefty functions that I
found difficult to grok and needed refactoring anyway as a result of
lookup changes (lookups now return an Either instead of a Maybe).

Subsequent commits will clean up and clarify this work further.

This does include one minor regression. Namely, an implementation of
`hash` in core/Color that was maximally generic now needs type casting.

* refactor: clean up recent Env changes

This commit removes some redundant functions, unifies some logic, and
renames some routines across the Env module in efforts to make it
cleaner. Call sites have been updated accordingly.

* chore: format code with ormolu

* fix: update lookup tests

Changes references to renamed functions in the Env module.

* refactor: style + additional improvements from eriksvedang@

- Rename arrayTy -> arrayTyA in ArrayTemplates.hs to disambiguate.
- Add maybeId util function.
- Remove commented code.
- Refactor a few functions for readability.

* fix: fix type inference regression

Recent commits introduced one minor regression whereby an instance of
type inference in core/Color.carp no longer worked and required
explicit type annotation. The problem ultimately had to do with
qualification:

- Prior to the recent changes, type inference worked because the call in
  question was qualified to Color.Id.get-tag, fixing the type.
- Failing to copy over a local envs Use modules to function envs
  resulted in finding more than just Color.Id.get-tag for this instance.

We now copy use modules over to function envs generated during
qualification to ensure we resolve to Use'd definitions before more
general cases.

Similarly, I made a small change to primitiveUse to support contextual
use calls (e.g. the `(use Id)` in Color.carp, which really means `(use
Color.Id)`)

* chore: Update some clarificatory comments

* chore: fix inline comment
2021-05-19 19:20:48 +02:00
..
output feat: treat keywords as symbols (#1190) 2021-04-06 11:37:29 +02:00
produces-output chore: Move some examples to test/produces-output (#989) 2020-11-23 06:30:43 +01:00
test-for-errors feat: Adds defn- and def- macros (#1174) 2021-03-03 08:57:36 +01:00
add-c.carp Implement load-stack. 2020-06-28 19:53:43 +02:00
args.carp Add support for cross-compilation. 2020-10-10 20:01:18 +02:00
array.carp feat: add Array.map-reduce (#1201) 2021-04-19 16:45:15 +02:00
binary.carp test: add assert-ref-equal, assert-just, and assert-nothing 2020-05-12 14:53:42 +02:00
byte_math.carp core: add a byte type 2019-11-01 10:52:34 +01:00
char.carp feat: add Char.to-byte and Char.from-byte (#1187) 2021-03-16 11:14:16 +01:00
check.sh Fix nixpkgs build. 2020-11-14 15:28:17 +01:00
control_flow.carp Fix all nth usage 2019-10-31 06:23:23 -03:00
csquare.c Implement load-stack. 2020-06-28 19:53:43 +02:00
csquare.h Implement load-stack. 2020-06-28 19:53:43 +02:00
deftype.carp Refactor: clean up Env module, store type environments in modules (#1207) 2021-05-19 19:20:48 +02:00
derive.carp feat: Derive (#1120) 2021-01-15 10:48:34 +01:00
double_math.carp Use Double.approx to compare exp results 2020-05-13 16:52:32 +02:00
dynamic_map.carp feat: add dynamic Map type (#1168) 2021-02-11 09:12:58 +01:00
dynamic-closures.carp fix: allow dynamic closures to mutate the global env (#1184) 2021-03-09 23:30:49 +01:00
execute.sh Make sure output directory is right in test (#1089) 2020-12-22 10:36:43 +01:00
filepath.carp The '(load)' command will work relative to the file containing it, if 2019-03-22 20:33:06 +01:00
fixture_file.txt dynamic: add read-file 2019-05-14 13:51:27 -04:00
fixture_foo.h tests: add regression tests for #288 2018-09-18 16:47:16 +02:00
float_math.carp core: make from-string better 2020-05-12 22:33:40 +02:00
format.carp feat: add fstr (#1142) 2021-01-26 06:18:16 +01:00
function.carp Adds Function.unsafe-ptr & Function.unsafe-env-ptr (#1026) 2020-11-27 10:17:29 +01:00
generics.carp test: add generics 2020-01-28 21:32:15 +01:00
heap.carp core: rename unsafe-range to range-or-default 2020-05-24 12:26:18 +02:00
init_global.carp feat: 'delete' interface (deciding whether a type is managed or not) (#1061) 2020-12-20 21:21:14 +01:00
int8.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
int16.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
int32.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
int64.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
int_math.carp fix Map and Set behaviour for negative hash values 2018-12-01 18:01:02 +02:00
interface.carp feat: overwrite existing interface implementations (#1094) 2020-12-23 22:24:52 +01:00
introspect.carp feat: add Introspect.arguments (#1163) 2021-02-01 17:03:38 +01:00
io.carp test: add assert-ref-equal, assert-just, and assert-nothing 2020-05-12 14:53:42 +02:00
long_math.carp core: fix Long_copy 2018-12-09 18:07:19 +02:00
macros.carp feat: add Unsafe.C.asm (#1206) 2021-05-03 15:14:26 +02:00
managed.carp feat: 'delete' interface (deciding whether a type is managed or not) (#1061) 2020-12-20 21:21:14 +01:00
map.carp feat: add dynamic Map type (#1168) 2021-02-11 09:12:58 +01:00
maybe.carp add test cases for zero in maybe and result 2020-04-30 14:33:18 +02:00
memory.carp feat: add Array.map-reduce (#1201) 2021-04-19 16:45:15 +02:00
nested.carp Add some more calls to implement to make tests pass 2020-05-10 13:32:22 -04:00
pattern.carp pattern: fix captures, add split and global-match-str 2020-02-09 13:42:39 +01:00
pointer.carp fix: Pointer str & prn (#1060) 2020-12-09 06:19:07 +01:00
random-seed.carp feat: make reseeding of Random at startup configurable (#1161) 2021-01-29 17:38:39 +01:00
random.carp tests: remove determinism test 2020-10-15 13:16:49 +02:00
record.sh Fix nixpkgs build. 2020-11-14 15:28:17 +01:00
recursion.carp test: use deftest everywhere 2018-11-08 07:16:52 +01:00
regression.carp fix: respect quotes in macro expand (#1160) 2021-01-28 16:40:41 +01:00
reload.carp Add remaining implements declarations 2020-05-10 22:53:35 -04:00
result.carp core: remove result.zero 2020-04-30 14:40:01 +02:00
safe_arithmetic.carp test: remove safe arithmetic on windows 2020-04-24 11:04:01 +02:00
short_circuiting.carp test: use deftest everywhere 2018-11-08 07:16:52 +01:00
sort.carp core: add sort flavors with custom comparators 2018-11-13 11:11:21 +01:00
Spec.hs refactor: Make Lookup module more focused and DRY (#1054) 2020-12-07 07:06:32 +01:00
static_array.carp Adds unsafe-raw to StaticArray module 2020-11-07 17:49:41 +00:00
statistics.carp feat: 'delete' interface (deciding whether a type is managed or not) (#1061) 2020-12-20 21:21:14 +01:00
string.carp fix: fix String.words for multiple spaces (#1205) 2021-04-23 09:35:34 +02:00
sumtypes.carp Fix some memory errors (that should be compiler errors). 2020-05-05 14:08:07 +02:00
system.carp Add and update tests for open-file 2019-11-08 17:20:05 -07:00
TestConstraints.hs Refactor: clean up Env module, store type environments in modules (#1207) 2021-05-19 19:20:48 +02:00
TestLookup.hs Refactor: clean up Env module, store type environments in modules (#1207) 2021-05-19 19:20:48 +02:00
tuples.carp core: autogenerate Tuple types and document 2020-05-24 11:49:27 +02:00
uint8.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
uint16.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
uint32.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
uint64.carp Fixes StdInt.carp load in tests 2020-04-04 13:21:23 +01:00
unicode.carp Merge 2020-05-11 16:10:35 +02:00
unsafe.carp Adds fn Unsafe.leak that prevents destructor from being run on a value 2020-04-10 14:56:20 +01:00
vector2.carp Various submodule fixes (#1078) 2020-12-18 21:45:28 +01:00
vector3.carp Various submodule fixes (#1078) 2020-12-18 21:45:28 +01:00
vectorn.carp Various submodule fixes (#1078) 2020-12-18 21:45:28 +01:00