Skip to content

Commit 5952351

Browse files
committed
Fix links on the initial C4 posts (missing space before closing }
1 parent ca22c79 commit 5952351

File tree

5 files changed

+13
-13
lines changed

5 files changed

+13
-13
lines changed

_posts/2025-08-31-classic-clojure-compiler-contemplation.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ In this post, we look at the overall structure of the compiler.
1010

1111
The other posts in the series are:
1212

13-
- [C4: AST me anything]({{site.baseurl}}{% post_url 2025-09-01-AST-me-anything}) - A tour of the AST nodes produced by the compiler
14-
- [C4: Symbolic of what?]({{site.baseurl}}{% post_url 2025-09-02-symbolic-of-what}) - A little digression on what symbols represent
15-
- [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity}) - How to analyze an `ISeq`
16-
- [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}) - How functions are implemented in Clojure
13+
- [C4: AST me anything]({{site.baseurl}}{% post_url 2025-09-01-AST-me-anything }) - A tour of the AST nodes produced by the compiler
14+
- [C4: Symbolic of what?]({{site.baseurl}}{% post_url 2025-09-02-symbolic-of-what }) - A little digression on what symbols represent
15+
- [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity }) - How to analyze an `ISeq`
16+
- [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy }) - How functions are implemented in Clojure
1717
- __C4: The fn*: talkin' 'bout my generation__ - Code-gen for functions
1818
- __C4: How type-ical__ - Type analysis by the compiler
1919
- __C4: I have something to emit__ - More on code generation

_posts/2025-09-01-AST-me-anything.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,5 +245,5 @@ The main body of the `Compiler.Analyze` method just steps through a series of te
245245
The node types mentioned in this list from a very small subset of the all the node types.
246246
Here we see pretty much a few data-oriented node types. Clearly the `Symbol` and `ISeq` analyzers are doing the heavy lifting. Enough that each gets its own post:
247247

248-
- [Symbolic of what?]({{site.baseurl}}{% post_url 2025-09-02-symbolic-of-what})
249-
- [ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity})
248+
- [Symbolic of what?]({{site.baseurl}}{% post_url 2025-09-02-symbolic-of-what })
249+
- [ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity })

_posts/2025-09-02-symbolic-of-what.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,12 +258,12 @@ private static object ResolveIn(Namespace n, Symbol symbol, bool allowPrivate)
258258

259259
To finish of this code, some brief comments on a few of the auxiliary methods mentioned above.
260260

261-
`Compiler.ReferenceLocal` is called when we have identified a reference to a local binding. It does some bookkeeping needed for code-gen. Specifically, it notes the usage of the local binding in the containing function (if there is one) and any functions above that is might be nested in. This is so that we know to close over those variables when creating an instance of the function. It also notes if the local variable is the `this` variable; reference to `this` precludes static linking. But more about that in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}).
261+
`Compiler.ReferenceLocal` is called when we have identified a reference to a local binding. It does some bookkeeping needed for code-gen. Specifically, it notes the usage of the local binding in the containing function (if there is one) and any functions above that is might be nested in. This is so that we know to close over those variables when creating an instance of the function. It also notes if the local variable is the `this` variable; reference to `this` precludes static linking. But more about that in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy }).
262262

263263
`Compiler.RegisterVar` is similar. It just notes the reference to the `Var` in the containing function (if there is one). A field in the class implementing the function will be created and initialized to the `Var` in question.
264264

265265
Looking up types corresponding to names is done in `HostExpr.MaybeType` and `HostExpr.MaybeArrayType`.
266-
I've written about these in [Are you my type?]({{site.baseurl}}{% post_url 2025-03-01-are-you-my-type}).
266+
I've written about these in [Are you my type?]({{site.baseurl}}{% post_url 2025-03-01-are-you-my-type }).
267267

268268
## I'm feeling a little testy
269269

@@ -288,7 +288,7 @@ These are when the symbol does not have a namespace:
288288
- `ns` -- treated as a special case -- always found
289289
- name found in current namespace (return var) (there are variants in the resolve/lookup code that will create the `Var` if not found)
290290

291-
Several kinds of AST nodes can be created from symbols. The details of node types are covered in [C4: AST me anything]({{site.baseurl}}{% post_url 2025-09-01-AST-me-anything}). For symbols with a namespace:
291+
Several kinds of AST nodes can be created from symbols. The details of node types are covered in [C4: AST me anything]({{site.baseurl}}{% post_url 2025-09-01-AST-me-anything }). For symbols with a namespace:
292292

293293
- ns/name, ns names a `Type`, that type has a field or property with the given name => `StaticFieldExpr` or `StaticPropertyExpr`
294294
- ns/name, ns names a `Type`, no field or property found, name does not start with a period => `QualifiedMethodExpr`, Static

_posts/2025-09-03-iseq-clarity.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,13 @@ The following special cases are handled:
9494
- we are not in an 'evaluation context' (more on that some other day).
9595
- the `Var` is not marked as dynamic, does not have metatdata `:redef` = true, and does not have metadata ':declared' = true
9696
- The Var is bound to a class that has an `invokeStatic` method with a matching number of arguments
97-
I discussed static invocation in another blog post, [The function of naming; the naming of functions]({{site.baseurl}}{% post_url 2025-02-28-function-naming}). It also will be discussed in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}).
97+
I discussed static invocation in another blog post, [The function of naming; the naming of functions]({{site.baseurl}}{% post_url 2025-02-28-function-naming }). It also will be discussed in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy }).
9898

9999
- primitive invocation. We create an AST node of type `InstanceMethodExpr` to invoke the `.invokePrim` method of the function. The conditions are:
100100
- `fexpr` is a `VarExpr`
101101
- the `Var` is bound to a class that has an `invokePrim` method with a matching number of arguments (determined by looking at the `:arglists` metadata on the `Var`)
102102
- we are not in an 'evaluation context' (more on that some other day).
103-
We will discuss this in more detail in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}).
103+
We will discuss this in more detail in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy }).
104104

105105
- keyword invocation. When our form looks like `(:keyword coll)`, we create an AST node of type `KeywordInvokeExpr`. The conditions are:
106106
- `fexpr` is a `KeywordExpr`

_posts/2025-09-04-functional-anatomy.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ I'll leave `applyTo` as an exercise.
288288

289289
## Static invocation
290290

291-
In the previous post [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity}), I touched upon the notion of static invocation of functions. Static invocation is an efficiency hack. It allows a call such as
291+
In the previous post [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity }), I touched upon the notion of static invocation of functions. Static invocation is an efficiency hack. It allows a call such as
292292

293293
```Clojure
294294
(f 1 2 3)
@@ -302,7 +302,7 @@ to bypass the usual dynamic dispatch that does a lookup of the current value of
302302

303303
When these conditions are met, for each `invoke` the function defines, there will be a `staticInvoke` method of the same arity with the actual function definition. The `invoke` just calls the `staticInvoke` of the same arity.
304304

305-
I provide more detail on some of the issues of static linking in a previous post outside this series: [The function of naming; the naming of functions]({{site.baseurl}}{% post_url 2025-02-28-function-naming}).
305+
I provide more detail on some of the issues of static linking in a previous post outside this series: [The function of naming; the naming of functions]({{site.baseurl}}{% post_url 2025-02-28-function-naming }).
306306

307307
## Primitive urges
308308

0 commit comments

Comments
 (0)