#programming
1 messages ยท Page 199 of 1
Not if it's a local array
i think that's as short as my matmul array will be getting
i suppose so
local arrays also seem to be zero-initialized
why dont you reuse A?
granted i dont know if its a square matmul or if you are allowed to do stuff in place
this looks nonstandard though
this is macro-able 
it's for 1d matrix x 2d matrix (both are input as 1d arrays)
get a lexer to count tokens for you
you shouldnt
it's unpleasant to read ABCDEFG
you will do stack smashing if you do

not really
its maths
doesnt need variable names just identifiers
have you tried removing the curly braces from the for loop
that works with if
wouldn't work, the size of the A matrix is h*1 and the size of the C matrix is w*1
if w is larger than h (and it is, in one case) it would ruin things
would probably be fucked in any case actually
hmm.
nope
even when stacking everything into a oneliner it doesn't let you remove the brackets for the for loop
return double C[30], for(....) { C[l%w] = .... }, C;
even if it's just a single expression doesn't work either

oooh that's an interesting one
Is this a c thing, cause that absolutely does work in c++
Ugly code competition
oh actually cant you declare C in the for loop start too

to save tokens
ok somehow
the C bot is fine
the rust one keeps making illegal moves
surely this is a skill issue on my part
oh yeah
drat, move to its own line i guess
no it wont work cause return outside
It's memory safe but it can only do the wrong thing
wait no, it returns C
actually would putting it in the for loop's first statement fuck with the return?
ye
don't think it's saving any tokens so whatever
it may do the wrong thing, but at least it does it well
current guesses are that (all of the following):
- the chess api is incorrectly marking discovered checks as checkmate (specifically, where a piece moves next to the king whilst also placing it in check)
- the rust example bot doesn't submit a move if the api returns no available moves, which probably just plays the last move that was played
can you use the fact that a += b evaluates to a + b
actually wait, I think its even more stupid, the C chess bot has an arithemtic fault that causes it to crash so cute-chess restarts it. This somehow means that it reinterprets the game state and then actually sees the move when restarted
wtf regex my eyes hurt
mat(A,B,h,w,i) {double C[30];return({for(l=h*w;l--;)C[l%w]+=A[l/h]*B[i+l];C;});}
t
AHHHHHHHH
ooh.
me eyes hurt I saw too much regex im leaving
sorry for no whitespace hard tot ype on phone
all i hear is WAH WAH WAH WAH WAH
then what is that
and why does it make my eyes hurt
You must work with python
no I learnt programming with c
i think this actually works, assuming i fix A and B having this problem
crazy
I understand some of it but some looks alien to me
im so sorry
Thats because they are writing it weird
that's why I started screaming regex
It looks like how Javascript looks on websites
without checking if it is anything else
js still looks mildly decipherable
gotta reduce tokens 
2 tokens worse
it's so fucked ๐
would've been so funny if it worked
wait you dont need that C;
@real sierra yeah its a bug in both my bot and your api
the += already evaluates to C
with a very elegant solution on my part 
Why
Some pay to use compiler?
same number of tokens without it
gotta reduce 
for some reason exit(-1) doesn't work, so faulting it it

For fun?
since its a 1 liner can you now remove the outer brackets of the function or is that too evil even for c

also the C; is necessary
wait dammit that deref isn't killing it smh
i tried that with functions too earlier
no removing the brackets
ok this actually works
@sage crag i am happy to report that __builtin_pow() works though
yaya
finally patity between the bots
careful which one you use
?
also there a bunch of these builtins
or well not quite because I use a different rand but w/e
there also powf iirc
there's more
m
i.e. __builtin_malloc
__builtin_free
__builtin_strlen
etc
perhaps __builtin_fma
or ctez
those require compiling with cpu features tho
since they correspond to x86 instrs
buhzaka

@real sierra (apologies for the ping barrage
) minimal(ish) example of something that gets a false checkmate and causes the bot to crash
1. e4 a5 2. Bb5 f6 3. Bf1 g5 4. Ke2 h5 5. a3 d5 6. Kd3 dxe4+ {White disconnects}
brb gonna make a bot the speedruns a discovered check from a pawn taking
i am back home 
i apparenlty have tuesday and friday afternoons completely off this year 
why dont you :buhFlipExplode: your way on out of here 
i wonder if there's a way to set up a macro so i can replace each of these lines with STAGE(2) or something so the 2 gets applied to that one input and also the function names that get called
why does it do 0, 0, 2, 3, 4 on the left side?
t do you know about __COUNTER__
weirdness from the logic involved with the fractal, i want to prune the moves at the first stage but doing stage1() at the start of a stage will undo that pruning
ok
i did not
i barely understand it either lol
search for it in this channel there is an example above
maybe be able to trim more
how are you defining function without return type btw

#define STAGE(N, first, second) \
stage##N(u, w) { \
stage(u, w, N, first, second); \
}
STAGE(2, stage0, stage1)
STAGE(3, stage0, stage2)
STAGE(4, stage2, stage3)
STAGE(5, stage3, stage4)
STAGE(6, stage4, stage5)
idk if this is even worth it 
i don't think it needs a return type
why do u hate me 
saw code golf examples where they just exclude any kind of return type or whatever
it just fricking turns the bot off? doesn't even submit illegal moves?
probably one of those sketch af c89 things
im evil 

remove all types from c
all inference

no that name is taken and is illegal to own twice
theres a zero width space in there

wait what are you cooking

the tree search pattern, with pruning
was hell trying to wrap my brain around the process and then trying to convert it into a recursive algorithm of some sort that i could express in functions
so do I actually have to worry or not
no
clever indeed
but yeah recursive search is probably the way
oh my god it's genius
i was gonna use computed goto in my bot for fun but i think it may be too expensive in tokens 
its vile
counter is incremented for any macro that uses it
its not per-macro
choose 1 thing

i can shave off even more than i expected

no more i++ silliness >:)
I'm too scared to do this
what if the order is somehow not what I expect and everything breaks

what have i done
manual loop unrolling with macros
actually couldn't i just put __COUNTER__ instead of i in the while loop?
and then not put counter in the silly macro
numbers aren't valid variables
i dont think that works
aw

and wtf why my my notebook run on my intergrated gpu
#define 0
could do i ## __COUNTER__
actually
but idk if that works as desired
why even limit myself
the only reason i was doing so was "what if there's a freak case where the number of available moves is more than 64"
idk are u talk about C++?
C
ts pmo

sybau ๐ฅ
i hate
LOL
LOL
typescript
or sbd in the general said teamspeak
I don't know why my engine SUCKS sometimes
it just sucks so bad
huh
the c code faults when there are no available moves
the program crashing loses the round
car
that's fine 
!

but there's no available moves
is the round not over
... 
ok
I'll take a look
not seeing legal moves is worrying
I wonder what I over constrained
why are the rules to this game so complicated

no wonder I suck at it
shiro never write a SAT solver pls
SAT mentioned
banned from autovectorization
FPE 
have you considered not dividing by 0 
ok lets see whats causing this disaster
iirc its because you're doing rand() % 0

(Not like i would manage to implement it anyway)
yeah
the issue is no legal moves in this position
it's double check which has some special and rarely-tested move rules
basically you're restricted to king moves only
But if there are no legal moves the game is over?
Or does it not detect the moves correctly
and can't move to attacked squares ofc
it's not detecting a valid move
in this pothere's a couple legal moves here in fact
you can take the pawn or move to e2, e3
c3 c4 also valid
very strange
..?
wat
oh i need to rebuild the library
[White "Human"]
[Black "example_bot (a)"]
[Result "1-0"]
[FEN "3qkbn1/3p1p2/4P3/8/8/8/4Q3/K7 b - - 0 1"]
1... Qb8 2. exd7+ {8.3s, Black disconnects} 1-0
it seems like it doesn't realize that:
- the queen has moved
- the pawn is unprotected
DEBUG: attacked bitboard
-XXXXXX-
XXXXXXXX
XXXXXX-X
X--XXXXX
-X-X-XXX
---X-X-X
---X----
--------
that's all the attacked squares on the board that the bot sees
which is correct
so why cant it move to the good squares

helpful dump_bitboard function from bitboard.h
oops
this is a significantly simpler position
ill check that one after this
id rather get the data from both test cases
in case its two bugs

heres another fun set of boards
dir: 0
--------
--------
--------
--------
XXXX-XXX
-XX--XXX
X-------
--------
dir: 1
--------
--------
--------
-------X
----X-X-
-----X--
----X---
--------
dir: 2
--------
--------
--------
--------
--------
----X---
--------
----X---
dir: 3
--------
--------
--------
--------
--------
--------
----X---
--------
dir: 4
--------
--------
--------
--------
--------
--------
--------
--------
dir: 5
--------
--------
--------
--------
--------
--------
--------
--------
dir: 6
--------
--------
--------
--------
--------
--X-----
--------
--------
dir: 7
--------
--------
--------
--------
--X-----
--------
----X---
--------
dir: 8
--------
--------
--------
--------
--------
-----X--
--------
--------
dir: 9
--------
--------
--------
--------
--------
--------
----X---
--------
dir: 10
--------
--------
--------
--------
--------
--------
--------
--------
dir: 11
--------
--------
--------
--------
--------
--------
--------
--------
dir: 12
--------
--------
--------
--------
--------
--X----X
--------
--------
dir: 13
--------
--------
--------
--------
--------
--------
--------
--------
dir: 14
--------
--------
--------
--------
--------
--------
--------
--------
dir: 15
--------
--------
--------
--------
--------
--------
--------
--------
the ray attack boards
shows the destination tiles of possible moves, starting with north moves, then northeast moves, clockwise to northwest moves, then all the knight moves
i can see the pseudo-legal move finder is generating the valid king moves
OH
found the bug

i had a short circuit eval for double check positions that would skip evaluating pseudo moves to squares not near the king (since they're automatically illegal)
but this skips the part of the function that actually shifts the attack square
phrr

d3e2
looks correct
what was that other position you wanted me to test again
with the fen
uci
ucinewgame
position fen 3qkbn1/3p1p2/4P3/8/8/8/4Q3/K7 b - - 0 1 moves f8d6 e6d7
go infinite
Chat wtf
looks correct
I was able to win in an auction a whole GoXLR for 90 bucks
im glad to see the broken situations are getting more and more niche
time to run another 10k games to look for bugs
new version sent

can i even use a transposition table with this method
it seems kinda hard to apply

I think its less though?
concentrated crashing 
Everything was running slow on my pc and when I checked, Sata connections were running at 16.7MBytes/s turns out my CMOS battery died and it was booting with IDE instead of AHCI

I love it when cute-chess dies and does this
holy ryzen 9
anyways is that chess bot?
shiwo why does cat test.txt | ./example_bot pin a core at 100%
oh wait
this one is literally just picking random moves
ikr 
im getting the same thing
uncertain
you would think it'd hit the semaphore but

it should at least freeze id think
i dont suppose being stuck on a mutex with no other running threads to switch to is a busy sleep
shrug
its awkward because the UCI thread is the child thread not the parent thread
whats up
cute-chess is no longer writing game logs
Player: rust-chess-bot (release) (a)
"Draw by 3-fold repetition": 8190
"Draw by fifty moves rule": 97
"Draw by insufficient mating material": 409
"Draw by stalemate": 186
"Loss: Black disconnects": 3
"Loss: Black mates": 269
"Loss: White disconnects": 5
"Loss: White mates": 288
"Win: Black disconnects": 5
"Win: Black mates": 276
"Win: White disconnects": 5
"Win: White mates": 267
it now crashes a lot less
only 18 times in 10k games
oh
you know what
i think i know what it is
the UCI scanf doesnt exit on eof

so if stdin closes without killing the process
it loops forever
easy patch, just a sec
uci
ucinewgame
position fen 1r3kr1/p1p5/2b2Pp1/np2b3/1P3P2/PKP4p/RQ1q3P/1NB1R2B w - - 1 39
go infinite
new crash 


yep that crashes
single check where you need to take the attacking piece without a king move 
DEBUG: check attacks bitboard
--------
--------
--------
X-------
--------
--------
--------
--------
this bitboard represents all squares that can be moved to in order to break the check
looks correct
so why isnt it working 
take the survey 
Server issue is wild
Good
they found each other
Some how google colaba gpus are shutdown
Yeah, and now I need to test what the largest dataset is I can use before my GPU explodes
Alr.. let's make a database with mostly bash
Too latte, I already pushed "don't show again" button
Damn, and I run that code locally right now that you saw on the image.
css router, bash web server
what do you call this stack
here's a reduced version of the fen 1r3kr1/8/8/np2b3/1P6/PKP5/RQ1q4/8 w - - 0 1
I think its due to the rook above the pawn
wait i got it all mixed up
Yeh
itโs a css web server and a bash db
fen fen fen
fein
i see
Wait..
the pin checker looks for straight-line sequences of king --> (friendly piece) --> (enemy piece that attacks on this ray)
I could make a really bad joke and include another part that starts with t
I am not gonna finish that sentence tho
what...
Twig for the templating engine
Could also use ASP for templating
just googled itโs basically jinja
For the abc stack
not cursed enough
Ehhh
Wait
What programming language starts with t
Then i make my own template engine that uses that syntax
TeX seems cursed for web templating
Or we could find another letter or use a letter from a different position of a language
The first option would allow for a potentially more SFW acronym
Stop spaming error
@trim valve pushed new version
(That's still funny)
I will back in some times
wdym โclosed beta testingโ isnโt sfw 

in a 5k game tournament
oh also i pushed again to try and fix the busy crash thing
you might have uh
wtf
mm yes smart pointer no refcount
Or we could replace the css with something that has the letter d in it, ise M4 for templating.. and we only missing the s

before the pin checker would stop looking on hitting another friendly piece
i meant to make it stop looking on hitting any piece
i instead made it stop looking on hitting empty squares too
Yeahh wait

the comments makethis even more bewildering
Use scheme for data communication between front end and back end instead of GraphQL
do they literally just want Arc<Arc<T>>?
@trim valve pushed again
๐ซธ
this should be the right condition
im confident this time
On the otherhand
someday we'll reach a point where the legal moves checker returns legal moves 
SQL is already used in the back end anyways
So we may not need to find something for the S
you should like
fuzz that thing
you know
generate test cases and compare it against an existing library
for like 2 hours
then patch bugs and rerun the failed cases

dinkdonk ```
uci
ucinewgame
position fen 6Q1/8/7k/7q/7R/8/7K/8 b - - 3 124
go infinite
We could probably work GD script in there somewhere
On the otherhand
Btw, wanna see what kind of output that model is gonna make?
Hi Hayleigh
We could also use D-Lang to write the webserver module for the SCSS runtime
I gotta go to class 
Alighty, the model is done with the 1024 epoches
is it at least improved
Shiro~ who did you mean?
Oh god...
no pinned pieces pls
Why tf is it so... uh... unsettling
fuzzing is for nerds (i am the nerd)
maybe one already exist
especially with random move bots
you try
black is crashing here?
oh I see

extremely rare edge case
pinned pieces can't move EXCEPT along the ray they're pinned on
Provided to YouTube by NexTone Inc.
The Whims of Fate ยท Lyn ยท Benjamin Franklin ยท ็ฎ้ปๅฐๅธ ยท ็ฎ้ปๅฐๅธ
PERSONA5 ORIGINAL SOUNDTRACK
Released on: 2017-01-17
Auto-generated by YouTube.
Only cause of google colaba gpus shutdown was delayed payment
Don't worry I have plenty of gpus left
I might need directional pin boards indicating the valid movement rays
Hmm that odd
M4 would literally be the only thing in the stack doing exactly everything it was designed for
Which m4
m4 
M4 chip from apple , m4 units of google colaba gpus
A80pro ?
gnu m4 i'd imagine
No the templating language
Hmm
Dementia
got the content in the top right
subway surfers
needs a 5 minute crafts video too my attention span is too short
I think I'm sick 
I've been seriously pushing myself writing the code for this event
not eating or sleeping enough lately
it's finally catching up to me 
im thinking you could extend this via RACK -
Rust - backend, reimplements everything else on the backend concurrently as well
Angular - Front end
Clojure - backend services OR C++ just to conflict with rust for no reason
Kubernetes for orchestrating a deployment
just use java for everything
java is funny
clojure runs on the jvm 
what is that
now you're speaking my language
what the FUCK is this stack bruh ๐
well conceived and comprehensive
object orientation is the future, just use java 
that's just c# with less steps
java was first 
An AI that is VERY primitive...
๐ฅ idk why it's not on java yet
it would be fully backward compatible
and it's such low hanging fruit
c# is literally bill gates said we need a god DAYUM java and hell nah we aint asking sun even though they're right there
and now we have neuro
cause and effect
erm actually i see a potential problem with == and object references
i mean the pics
i remember reading some essay by a diehard java fan on how java is actually perfect and successful only because it doesn't have operator overloading
you've heard of
, now get ready for 
that was the argument
my first impression of java
what the f is e
std::cunt << ":(";

look at python
just print(1+1) and 2
sorry only real languages are considered here
i hope python dies in the pits of the hell it belongs in
so it doesnt count right
python at least doesn't fucking shift strings into stdout
ok i hate python when i has to competitive programming
we have std::println in c++ now :3
fcking slow
conda is cool in theory if it wasn't so god damn slow
though i guess there's mamba for that
blyat
use npm and node for everything
js mentioned
I used to use Lua for all my competitive programming
i hope your bread is soggy tonight.

rain wth
i hope u have sweet dreams
i hope your pillows are an uncomfortable temperature
i dont use pillow
sad
you psychopath
I DONT EVEN HAVE A BED HHHH
mold my beloved
lay on the floor
where do you SLEEP
too bad it doesn't exist until it can compile the linux kernel
on the floor???
ok i have mattress but i dont like it
man i only use C++ for competitive programming
are you competing to see who can get into android hell the quickest?
because that's how you get into android hell
everytime i use C++ its like
#include <bits/stdc++.h>
#define int long long
#define ii pair<int,int>
#define fi first
#define se second
#define el '\n'
#define faster ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define oo 9000000000000000000
const int MAXN = 1e3+2;
using namespace std;
is anyone looking for a part time position where they send candid professional replies to hate mail
why
why not
part time but still paid, you imply?
im in

I'm probably not going to have time to respond to the flood of vulgar language
oh i am great at pretending there was a reason for the cardinal sins present in a codebase
"it appears you have called me a `cunt`, may i inquire as to why you would use such profanity in such a manner? just making sure we're on the same page about your longtime goals and where you see yourself in 5 years on this path you have chosen"
it exists
called gc
Well.. the thing is, first of all.
angular
And second.. not cursed enough
how i see python:
python its just 3 line
but angular has triangle
or smth
Don't care
what is this indentation
ok what about Ansible playbooks instead
My silly stack better
No
wtf
big ass embed
java if it was python
possible?
Puya PY32F002B MCU, which comes with a Cortex-M0+ core at 24 MHz, 3 kB SRAM and 24 kB of Flash.
man
the CPU
with love
right
nice vape
phr
a disposable one btw
cool
throw er in the landfill
now play doom on it
they done been trying
holy fuck
anything but vaping
not a disposable one 
๐
isn't that a good thing..
its a joke 
vaping is a bad thing actually 
my country ban vape
1984 i wnna die im finna die ya know
you will smoke cigarettes and you will like it 
chat wtf is ts
gregante test
i tried
bad
good answer
you will print python on a bit of paper and use it to roll a blunt
relish in the flames of unholiness
How you know greg is the father?
i'd never smoke personally
as someone who smokes, what
easiest way to not smoke is to smoke like once when not drinking or anything else to make it appealing outside of the smoking
idk cigarettes in my country smell bad
i drink once or twice a year and would never smoke
like very bad i cant smell them
my liver yearns for water
usually the opposite is what is said - they smell good but not when burned
exhaust smells good
for like 1 second
i mean the old one
i mean if it's the 40% stuff yeah
you usually drink those in shots
i do like gasoline/petrol smell
many old motorbike here
or in my case, bottoms up and chase it with soda right after :3
im gonna be like that that girl that drinks gasoline or whatever that fake mid 2000s show was
and its smell like lead
no i consume all
this is very related to programming hm yes
i was like
it's related via inheritence of the attributes of its parent discussion
paralysis
tetO
i wish rules were less strict i would tell you about what people actually do with gasoline
for whole day
i think the best way to fix chess pin checking is to break the pin finder into pieces for each ray
as in kasane teto?
and then they're split into separate bitboards so it should be easy to ensure things only move on the ray
no 
you confuse me


am i too hungover to understand this
you aren't drunk enough 
wrong
it's rule 3 that i'm concerned about not rule 4 

i do not in fact wish to open a tech repair shop
MODS why is #programming baiting me into drinking on a workday
drinking is in our nature as programmers
ban everyone
duh
oh no
Someone tell me why I'm about to drive to work (1 hour) to be there for 1 hour in a meeting and then drive back home
I used to do that for class at the start of covid
that's good at least
What pics again?
And I'm just so prudent going in
I'm busy fumbling my way through a PKGBUILD (very hard, elite level task ) I don't have time
I feel terrible
I just want to go home honestly but I can't afford to miss these classes
shimo go home after class 

good luck 
so, funny thing about the tokenizer: these three lines each count as "11 tokens"
yes.
it seems to ignore anything past STAGE for counting the tokens
not a comment bug this time
i have tested them in a compiler and even that last line works exactly as intended
lol?
can always patch tcount 
noooo my infinite token exploit!!!!!!!
tcount is
... something
you would think all the tree-sitter submodules work the same
so I don't get how they are this incompatible with one another
so the meta strat is to break the token counter? 
the meta strat is
I'll see how far t can take it
doing this yields the exact same token count LOL
literally everything
and if you think i'm joking i'll prove it
make a model larger and larger until token count overflows 
not that kind of token
ye just put the whole program in the macro
just work, onesignal!
lol
just write your own tokeniser
this one is garbage
genuinely why does it need tree sitter to count tokens
"just" write your own tokenizy
just ignore language semantic rules
its incredibly easy to get a fair tokeniser this way
it makes sense at some level, it uses tree sitter to parse the syntax tree and then extracts tokens from it
but yeah
#define PROGRAM \
int main() {\
printf("wah");\
}
PROGRAM```
problem is writing a tokenizer for every language
or that supports every supported language
no its not they all use the same dialectical rules
if we did have our own tokenizer, we could make strings count for tokens according to their length
they are very different honestly
so that'd be convenient
but yeah the specific symbols language use for things vary quite wildly
just have like two tokens
I don't speak rust so it's beyond me
one for new lines and one for everything else that you just split by spaces and arbitrarily call an identifier
i disagree in terms of practical use
problem fixed
you are cursed to oxidize
you want a heuristic for the length of the program
we dont care about the exact token number
I see
but I still think there will be edge cases based on language particulars
e.g. what you consider a delimiter may have different meaning for some languages
just make ascii strings identifier tokens, split at whitespace, and any other char a token
or what you consider a string
it will work for all languages to a reasonable degree 
call(1,2,3) 1 token?
Anyone recommended a good python course?
string delimiter meaningless since we want to get token inside string anyway
i hope python dies
why would that be the case 
did guido murder your family or what 
python murdered my mother
ascii

Why? Is less worse than C++
python
I still have nightmares with that one
anyway
I can certainly try when I get home
but I feel like nobody will like what I produce 
"why did you do it this way"
"should be like this"

It's beautiful but not for web
ill write it
10 years of adjusting tokenizer to match people's personal taste on what a token is
and ignore all complaints

9 token bot
except for language complaints
only thing i couldn't include was the include
this probably does need patch yea
yeah LOL
what in unholy hell
I would like to be able to identify actual strings in languages and tax them for their length
can make that lang specific, not hard
tax the rich strings!
for now i'll make sure my token count is PROPER by just doing a newline after each define
because just doing this makes everything (besides the other declares in there) appear to the tokenizer just fine
m
i'm fixing tcount rn 
riih
hlang
new competition: who can write an accurate token counter in the minimum number of tokens
token golfing
iterators
does one run c code through the preprocessor before token counting it
that would absolutely balloon the token count
darned shame
if they did I'd be toast
same
my code is about 50% larger without defines
even without defines
#include <stdio.h> and suddenly you have at least a thousand tokens
hmm
true
my <vector> include is just 3 tokens
3693 tokens for including stdio 
oh
god bless includes
was just curious
i'm gonna do unistd.h, stdio.h, and stdlib.h >:D
in my case, it actually saved me tokens to uninclude other libraries
I refuse to give up stdbool.h
you could include math.h for the pow(a,b) function, but why do that when you could just not include math.h and then use __builtin_pow(a,b) instead?
use a c++ compiler and you get it for free (stdbool)
chat, the file is 70.3 kilobytes
small amount of text
now where is this mystical token counter
I need math.h for log and sqrt
google rrsty tcount
it's something like that
smh, just use __builtin_log and __builtin_sqrt
delicious
i mean it is a preproc_arg
preproc_arg
compiler specific yucky
i mean surely it makes sense









